Javascript单词边界unicode空间问题

时间:2013-07-03 16:14:54

标签: javascript regex unicode

我想编写一个匹配完整单词或短语的正则表达式模式,即使它们有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");

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

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

1 个答案:

答案 0 :(得分:1)

只需回写第1组中的captured

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

如果您没有使用replacematchexec并手动执行替换,您仍然可以访问返回数组中的捕获组并插入空格或空字符串你的span

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

var pattern = new RegExp('(^|\\s)('+phrase+')(?=\\s|$)', "gi");
output = string.replace(pattern, '$1<span>$2</span>');