我想编写一个匹配完整单词或短语的正则表达式模式,即使它们有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");
但我不是在寻找那些属于另一个子串的字符串。
是否有可能以更好的正则表达式模式解决我的问题?
答案 0 :(得分:1)
只需回写第1组中的captured:
output = string.replace(pattern, '$1<span>' + phrase + '</span>');
如果您没有使用replace
但match
或exec
并手动执行替换,您仍然可以访问返回数组中的捕获组并插入空格或空字符串你的span
。
顺便说一句,如果您也捕获了该短语,则替换中不需要任何字符串连接:
var pattern = new RegExp('(^|\\s)('+phrase+')(?=\\s|$)', "gi");
output = string.replace(pattern, '$1<span>$2</span>');