Я работаю над улучшением наших функций глоссария в пользовательской CMS, работающей с классическим ASP (ASP 3.0) на IIS с кодом VBScript. Я нахожусь в тупике перед проблемой регулярного выражения, которую не могу решить.
Вот текущий код:
If InStr(ART_ArticleBody, "href") = False then
sql="SELECT URL, Term, RegX FROM GLOSSARYDB;"
Set rsGlossary = Server.CreateObject("ADODB.Recordset")
rsGlossary.open sql, strSQLConn
Set RegExObject = New RegExp
While Not rsGlossary.EOF
URL = rsGlossary("URL")
Phrase = rsGlossary("RegX")
With RegExObject
.Pattern = Phrase
.IgnoreCase = true
.Global = false
End With
set expressionmatch = RegExObject.Execute(ART_ArticleBody)
if expressionmatch.count > 0 then
For Each expressionmatched in expressionmatch
RegExObject.Pattern = Phrase
URL = "<a href=" & URL & ">"& expressionmatched.Value & "</a>"
ART_ArticleBody = RegExObject.Replace(ART_ArticleBody, URL)
next
end if
rsGlossary.movenext
wend
rsGlossary.movefirst
Set RegExObject = nothing
end if
Вместо того, чтобы пропускать ссылки на глоссарии в любой статье, в которой есть ссылка, как в приведенном выше коде, я хотел бы изменить код для обработки каждой статьи, но иметь шаблон RegEx , избегать сопоставления на запись глоссария, если совпадение находится внутри тега.
Например, курсивом ниже приведен тестовый пример для этой записи регулярного выражения в моей БД: ROI|return on investment|investment return
Вот ссылка, использующая термин глоссарий: <a href="ROI.htm">Info on return on investment</a>.
Теперь вот глоссарий в виде простого текста, а не внутри ссылки: return on investment
.
Мы хотим найти третий экземпляр соответствия, но не находим первые два, потому что они оба находятся внутри HTML-ссылки.
В приведенном выше тексте, если бы я обрабатывал статью для записи глоссария «ROI | возврат инвестиций | возврат инвестиций», я не хочу совпадать с первым или вторым совпадением, поскольку они находятся в теге. Мне нужен шаблон регулярных выражений, чтобы пропустить эти совпадения и просто сопоставить их с любыми тегами, не входящими в тег.
Любая помощь по этому вопросу будет принята с благодарностью.