Я пытаюсь выделить набор ключевых слов с помощью JavaScript и регулярного выражения, я столкнулся с одной проблемой, мое ключевое слово может содержать буквальные и специальные символы, как в @text #number и т. Д. Я использую границу слова для сопоставления и замены всего слова, а не частичное слово (содержащееся в другом слове).
var pattern = new regex('\b '( + keyword +')\b',gi);
Здесь это выражение соответствует всем ключевым словам и выделяет их, однако в случае, если какое-либо ключевое слово, такое как "число:", не выделяется.
Мне известно, что \bword\b
соответствует границе слова, а специальные символы не являются буквенно-цифровыми символами, следовательно, не соответствуют вышеуказанному выражению. Не могли бы вы сообщить мне, какое выражение регулярного выражения я могу использовать для выполнения вышеуказанного.
== Обновить ==
Для приведенного выше я попробовал предложение Тима Пицкера для следующего регулярного выражения,
expr: (?:^|\\b|\\s)(" + keyword + ")(?:$|\\b|\\s)
Вышеупомянутое, похоже, помогает мне найти совпадение для всего слова с буквенно-цифровыми и не буквенно-цифровыми символами, однако всякий раз, когда ключевое слово имеет последовательный тег html до или после ключевого слова без пробела, оно не выделяет это ключевое слово (например, социальное обеспечение < strong> * number: ‹br> *) Я пробовал следующее регулярное выражение, но оно заменяет тег html, предшествующий ключевому слову
expr: (?:^|\b|\s|<[^>]+>)number:(?:$|\b|\s|<[^>]+>)
Здесь ключевое слово number:, которое имеет < br >
(специально добавлено пробел для тега br, чтобы браузер не интерпретировал тег), следующее без пробела между ними выделяется ключевым словом.
Можете ли вы предложить выражение, которое игнорировало бы последовательный тег html для всего слова, содержащего как буквенно-цифровые, так и не буквенно-цифровые символы.