给出以下字符串:
var text = 'foo bar foo bar hello world';
我尝试输出字符串:
<mark>foo</mark> <mark>bar</mark> <mark>foo</mark> <mark>bar</mark> hello world
使用正则表达式:
var pattern = /(foo)|(bar)/g;
text.replace(pattern, '<mark>$1</mark>');
但输出成了:
<mark>foo</mark> <mark>foo</mark> hello world
如何在替换参数中指定所有匹配?如果我提供多个(例如100个)匹配怎么办?我是否必须在替换中指定所有匹配项($1
至$100
)?
答案 0 :(得分:4)
问题出在/(foo)|(bar)/g;
,bar
位于第二个被捕获的群组中。而在替代中,仅使用第一个捕获的组。
您可以使用单个捕获的组,其中包含foo
和bar
的更改。我还建议使用\b
字边界将foo
和bar
作为完整字词匹配,而不是像foobar
这样的其他字词的一部分。
text.replace(/\b(foo|bar)\b/g, '<mark>$1</mark>');
var text = 'foo bar foo bar hello world';
document.body.innerHTML = text.replace(/\b(foo|bar)\b/g, '<mark>$1</mark>');
&#13;
答案 1 :(得分:1)