我正在尝试使用正则表达式替换特定的字符串。
int
我正在使用动态正则表达式替换它,因为我有很多对象。
var replace = {'<RAndom>': "random object"};
但它没有用。我认为问题在于分号,但我不确定。输出再次相同。
var tagsText = "<RAndom> hellow world";
var regex = new RegExp('\\b(' + Object.keys(replace).join('|') + ')\\b', 'g');
tagsText = tagsText.replace(regex, function(match) {
return replace[match] + match;
});
有什么想法吗?
答案 0 :(得分:2)
问题是在\b
和&
之前的每一侧都存在;
(字边界)。 &
和;
都不是非单词字符,\b
无法在非单词字符之前和之后声明。
您可以改为使用\B
:
var regex = new RegExp('\\B(' + Object.keys(replace).join('|') + ')\\B', 'g');
然后
tagsText = tagsText.replace(regex, function(match) {
return replace[match] + match;
});
//=> "random object<RAndom> hellow world"
答案 1 :(得分:1)
单词边界\b
和非单词边界断言行为取决于上下文。使用明确的(^|\W)
和($|\W)
:
var replace = {'<RAndom>': "random object"};
var tagsText = "<RAndom> hellow world";
var regex = new RegExp('(^|\\W)(' + Object.keys(replace).join('|') + ')(\\W|$)', 'g');
tagsText = tagsText.replace(regex, function(match, g1, g2, g3) {
return replace[g2] ? replace[g2] + match : match;
});
// And just a demo below
document.body.innerHTML = "<pre>" + tagsText.replace(/&/g, '&') + "</pre>";
&#13;
(^|\W)
将匹配字符串的开头或非单词字符。 ($|\W)
将匹配字符串的结尾或非单词字符。
由于我们现在有3个组,我们可以将它们作为参数传递给replace回调。使用replace[g2] ? replace[g2] + match : match;
,我们首先检查g2
键是否有值,如果是,则执行替换。否则,只需返回match
。