我想用 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/