Регулярное выражение VBScript для соответствия всем URL-адресам, не находящимся в якоре

Я рву на себе волосы из-за этого, кажется, вы не можете сделать регулярное выражение для doesn't begin with в VBScript.

Я начал писать сложный запутанный фрагмент кода, который их находит, но я бы предпочел найти более простой способ.

Пример ввода:

<a href="http://www.scirra.com/forum" target="_blank" title="Some value">my link text</a><br /><br />
<a href="http://www.scirra.com/blog" target="_blank" title="Some value">http://www.scirra.com/blog</a><br /><br />
<a href="http://www.scirra.com" target="_blank" title="Some value">http://www.scirra.com</a><br /><br />
<a href="http://www.scirra.com" target="_blank" title="A title">tester</a><br /><br />
http://www.google.com<br /><br />
http://www.scirra.com/blog<br /><br />
https://www.scirra.com

Как видите, последние 3 URL-адреса не заключены в теги привязки, а должны быть. Я пытался создать правило, в котором оно соответствует https?://, где оно не начинается с тега <a>, но я не могу найти простой способ сделать это.

Кто-нибудь может помочь?


person Tom Gullen    schedule 14.01.2012    source источник


Ответы (1)


К сожалению, в vbscript нет ретроспективных выражений (см. здесь список разновидностей регулярных выражений). какие особенности)

Вы всегда можете сопоставить что-то вроде:

(^|[^>])(https?://[rest_of_url_regex_here])

А затем, если вы выполняете поиск/замену, замените на \1<a href="\2">\2</a>, чтобы вернуть захваченный вами лишний символ.

person mathematical.coffee    schedule 14.01.2012
comment
Я не уверен, что это будет хорошо работать, если кто-то сделает <b>http://www.google.com</b>, это не совпадет. :( - person Tom Gullen; 14.01.2012
comment
Что ж, рекомендуемый способ анализа HTML/XML - использовать какой-то специально созданный для него парсер именно потому, что регулярное выражение не справляется с такой проблемой. Regex довольно плохо подходит для разбора HTML. - person mathematical.coffee; 14.01.2012