下午好!我有一个这样的正则表达式:
/((^|[\s\.\,\;])(text)($|[\s\.\,\;])|(^|[\s\.\,\;])(textf)($|[\s\.\,\;])|(^|[\s\.\,\;])(texts)($|[\s\.\,\;])|(^|[\s\.\,\;])(textt)($|[\s\.\,\;]))/gi
它由几乎相同的形式块组成(^|[\s\.\,\;])(text)($|[\s\.\,\;])
它们仅在搜索词的形式上有所不同。定期搜索各种变体(text、textf、texts、textt)中所有出现的单词 text。
这是我的使用方法:
'textf some words texts another words. Textt bla-bla-bla'.replace(/((^|[\s\.\,\;])(textf)($|[\s\.\,\;])|(^|[\s\.\,\;])(texts)($|[\s\.\,\;])|(^|[\s\.\,\;])(textt)($|[\s\.\,\;]))/gi,
function() {
console.log('"' + arguments[0] + '"');
return '<a>' + arguments[0] + '</a>';
})
console.log(arguments[90])
输出这个:
“
文本” “文本” “文本
”
替换后的行本身如下所示:
<a>textf </a> some words<a> texts </a>another words.<a> Textt </a>bla-bla-bla
也就是说,正如你所看到的,正则表达式找到的匹配还包括带逗号的空格,理论上应该是单词边界,不参与替换。显然,我以某种方式错误地编译了正则表达式。我希望文本像这样结束:
<a>textf</a> some words<a>texts</a> another words.<a>Textt</a> bla-bla-bla
请告诉我如何更改正则表达式以实现此目的?
问题不在于正则表达式,而在于用于替换的内容。
如果您参考replace function 的帮助,您可以看到该函数作为第二个参数传递的参数有哪些。
由于使用了很多组,因此您需要替换一个特定的
您可以在此处了解有关代码构造的更多信息:
或者像这样:
这是俄语和拉丁字母的解决方案(包括数字和下划线,因为我使用
\w)必须捕获单词之前的字符,因为 js 无法回头,并通过函数 (variable
arguments[1]) 返回它。捕获的单词本身在arguments[2].试试这个解决方案: