javascript - 在 JavaScript 中修改 RegEx 匹配

标签 javascript regex

我想用 JavaScript 中的方括号将给定字符串中所有出现的特定单词括起来。

假设这些词是苹果、橙子和香蕉。然后主题文本 “You are compare apples to oranges.” 应该变成 “You are compareing [apples] to [oranges].”

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

谢谢。

最佳答案

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

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

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]')
}

演示:

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].

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

关于javascript - 在 JavaScript 中修改 RegEx 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4809324/

相关文章:

php - 正则表达式仅适用于 URL 中的特定域名

javascript - Macbook touch bar 的表单输入事件

javascript - 如何延迟加载 Facebook 的 Like Box?

javascript - 在 gridview 中使用 <a href>

javascript - 文本框接受字符和数字或字母但不接受数字

regex - 删除文本文件中的所有超链接,linux脚本

javascript - JavaScript 中 new Object() 时发生了什么

javascript - 访问我们传递给另一个对象的函数内的注入(inject)依赖项

javascript - 正则表达式:获取捕获组的位置列表,而不是匹配项

python - 使用正则表达式获取 pandas 数据帧列中部分匹配的行索引