0

我想编写一个匹配完整单词或短语的正则表达式模式,即使它们有 unicode 字符来用一些 html 代码包装它们。所以我使用这种模式:

var pattern=new RegExp('(^|\\s)'+phrase+'(?=\\s|$)', "gi");

它甚至可以完美地适用于一个问题的多词短语。如果短语不是字符串的开头,则它与单词前的空格匹配。所以在我包装它之后,我会失去那个空间。我只想包装短语变量而不是空格。

例如:

var string="This is a nice sentence.";
var phrase="is a nice";
/*OUTPUT: Thisis a nicesentence*//*HTML OUTPUT: This<span>is a nice</span>sentence*/
/*What I want: This <span>is a nice</span> sentence*/

当然,这种模式可以工作:

var pattern=new RegExp(phrase, "gi");

但我不是在寻找那些是另一个子字符串的字符串。

是否可以使用更好的正则表达式模式解决我的问题?

4

1 回答 1

1

只需写回您在第 1 组中捕获的内容:

output = string.replace(pattern, '$1<span>' + phrase + '</span>');

如果您不使用replacebut matchorexec并手动进行替换,您仍然可以访问返回数组中的捕获组,并在span.

顺便说一句,如果您也捕获了该短语,则在替换中不需要任何字符串连接:

var pattern = new RegExp('(^|\\s)('+phrase+')(?=\\s|$)', "gi");
output = string.replace(pattern, '$1<span>$2</span>');
于 2013-07-03T16:17:44.713 回答