在字符串javascript中使用正则表达式替换

时间:2016-04-21 10:54:07

标签: javascript regex

我正在尝试使用正则表达式替换特定的字符串。

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;
});

有什么想法吗?

2 个答案:

答案 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, '&amp;') + "</pre>";
&#13;
&#13;
&#13;

(^|\W)将匹配字符串的开头或非单词字符。 ($|\W)将匹配字符串的结尾或非单词字符。

由于我们现在有3个组,我们可以将它们作为参数传递给replace回调。使用replace[g2] ? replace[g2] + match : match;,我们首先检查g2键是否有值,如果是,则执行替换。否则,只需返回match