在JavaScript中修改RegEx匹配

Tom*_*ker 3 javascript regex

我想用JavaScript中的方括号包装给定字符串中所有出现的某些单词.

说这些话是苹果,橘子和香蕉.然后主题文本"You are comparing apples to oranges."应该变成"You are comparing [apples] to [oranges]."

这个的正则表达式是(apples|oranges),但问题是如何包装或更一般地,修改每个匹配.String.replace()允许您使用某个预定义的值替换匹配的匹配项,而不是基于匹配项的值.

谢谢.

Thi*_*ter 6

js> var str = 'You are comparing apples to oranges.';
js> str.replace(/(apples|oranges)/g, '[$1]')
You are comparing [apples] to [oranges].
Run Code Online (Sandbox Code Playgroud)

如果您更喜欢可以简单地输入单词数组的函数:

function reg_quote(str, delimiter) {
    return (str+'').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\'+(delimiter || '')+'-]', 'g'), '\\$&');
}

function mark_words(str, words) {
    for(var i = 0; i < words.length; i++) {
        words[i] = reg_quote(words[i]);
    }
    return str.replace(new RegExp('(' + words.join('|') + ')', 'g'), '[$1]')
}
Run Code Online (Sandbox Code Playgroud)

演示:

js> mark_words(str, ['apples', 'oranges']);
You are comparing [apples] to [oranges].
js> mark_words(str, ['apples', 'You', 'oranges']);
[You] are comparing [apples] to [oranges].
Run Code Online (Sandbox Code Playgroud)

如果您希望它不区分大小写,请替换'g''gi'.


pmd*_*mdj 5

除了其他人提到的简单替换字符串之外,您还可以传递String.replace()为每个匹配调用的函数 ,并将其返回值替换为结果字符串.这使您可以进行更复杂的转换.有关详情,请参阅:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter