我需要替换字符串中所有匹配的单词或特殊字符,但无法找到一种方法来做到这一点。
例如,我有一个字符串:“This - is a Great Victor”
我需要将所有 -
替换为 +
符号。或者great
和unpleasant
- 用户选择要替换的单词并给出替换。
"\\b"+originalTex+"\\b"
一直在工作,直到我意识到\b 只适用于单词字符。
所以问题是:\b 的替换是什么可以让我替换由空格包围的任何匹配单词?
编辑:我无法删除单词边界,因为这会导致不精确匹配。例如:你是你的世界的创造者,改变你的同时,你的也会被改变。因为它包含“你”
最佳答案
您需要使用以下代码:
var s = "you are creator of your world";
var search = "you";
var torepl = "we";
var rx = new RegExp("(^|\\s)" + search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + "(?!\\S)", "gi");
var res = s.replace(rx, "$1" + torepl);
console.log(res);
(^|\\s)
将匹配并捕获字符串或空格的第 1 组开头。 search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
将转义特殊字符(如果任何)在搜索词内。 (?!\\S)
前瞻需要在搜索词之后有空格或字符串结尾。
$1
反向引用在替换期间将第 1 组的内容插入回字符串中(此处无需使用任何后向查找)。
关于javascript - 正则表达式替换字符串中所有完全匹配的单词/字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43190354/