我需要替换字符串中的多个缩写。
结果应该是:
One DUMMY_0 two DUMMY_0 three DUMMY_0 four profession
我做错了什么?
const abbr = ['vs.', 'p.o.'];
let str = 'One vs. two vs. three vs. four profession';
abbr.forEach((ab, index) => {
const regex = new RegExp('\b' + ab + '\b', 'g');
str = str.replace(regex, 'DUMMY_' + index);
});
console.log(str);
答案 0 :(得分:2)
从正则表达式中删除'\b'
。
此外,你必须逃避特殊字符。
const abbr = ['vs.', 'p.o.'];
let str = 'One vs. two vs. three vs. four profession';
abbr.forEach(function(ab, index) {
var regex = new RegExp(getParsedString(ab), 'g');
str = str.replace(regex, ('DUMMY_' + index));
});
console.log(str);
function getParsedString(str) {
var specialChars = /(?:\.|\!|@|\#|\$|\%|\^|\&|\*|\(|\)|\_|\+|\-|\=)/g;
return str.replace(specialChars, function(v) {
return "\\" + v;
})
}

.
以外的特殊字符。const
内部循环替换var
。如果使用ES6,则首选let
。答案 1 :(得分:2)
首先,你必须删除你的正则表达式中的\b
(为什么你在那里写?),第二:你必须逃避正则表达式中的点,因为点意味着"任何字符&#34 ;用正则表达式。
修改后的代码:
const abbr = ['vs.', 'p.o.'];
let str = 'One vs. two vs. three vs. four profession';
abbr.forEach((ab, index) => {
const regex = new RegExp(ab.replace(/\./, "\\."), 'g');
str = str.replace(regex, 'DUMMY_' + index);
});
console.log(str);

修改:在循环中添加了转义
答案 2 :(得分:2)
解决此问题的另一种方法,代码更少,没有正则表达式。
const abbr = ['vs.', 'p.o.'];
let str = 'One vs. two vs. three vs. four profession';
abbr.forEach((ab, index) => {
str = str.split(ab).join('DUMMY_' + index);
});
console.log(str);