Javascript单词边界unicode空间问题

Javascript word boundary unicode space issue

本文关键字:空间 问题 unicode 边界 单词 Javascript      更新时间:2023-09-26

我想写一个正则表达式模式,它可以匹配完整的单词或短语,即使它们有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组中捕获的内容:

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

如果不是使用replace而是使用matchexec,并且手动进行替换,则仍然可以访问返回数组中的捕获组,并在span之前插入空格或空字符串。

顺便说一句,如果你也捕获了这个短语,那么在替换中不需要任何字符串连接:

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