我花了几个小时试图解决这个问题,但没有运气。如果有人能指出我正确的方向,我将不胜感激。
问题在于 RegExp 对象完全忽略了 \b 和 \s 元字符。
var orOperator = 'or';
var term = 'ipsum';
var str = 'lorem or ipsum or ipsumal';
var regex = new RegExp('(\\s)\\b' + orOperator + '\\s' + term + '\\b', 'gi');
console.log(regex);
str = str.replace(regex, '');
虽然生成的正则表达式应该是
/(\s)\bor\sipsum\b/gi
我一直收到这个(元字符被删除),但我不知道为什么
/(s)orsipsum/gi
最佳答案
您还可以使用 String.raw
标记函数 ( more on MDN ) - 它会忽略(不处理)任何转义序列又名元字符并允许替换:
var orOperator = 'or';
var term = 'ipsum';
var str = 'lorem or ipsum or ipsumal';
var regexStr = String.raw`(\s)\b${orOperator}\s${term}\b`;
var regexFlags = 'gi';
var regex = new RegExp(regexStr, regexFlags);
console.log(regex);
str = str.replace(regex, '');
结果是
/(\s)\bor\sipsum\b/gi
'lorem or ipsumal'
关于Javascript RegExp 忽略元字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38400068/