使用javascript变量,我想替换一个单词的每个出现(在示例中:'OR'与|| -sign),但前提是它不出现在双引号字符串中。
是否可以使用正则表达式?
我正在看的一个例子:
'one OR " two OR " OR three OR five OR " OR six "'.replace( regex , ???) is giving
'one || " two OR " || three || five || " OR six "'
我试过了:
regex = new RegExp("([^\"]*)(OR?)([^\"]*\"[^\"]*\")" , "gi");
text = text.replace( regex , "$1||$3");
结果:
'one || " two OR " OR three OR five || " OR six "'
留下了一些要替换的OR。
如果我再次尝试更换,为了摆脱剩余的OR,替换确实(当然)不起作用:
'||ne || " two OR " OR three || five || " OR six "'
'one'中的字母'o'已被替换为|| -sign,这不是故意的!
是否可以使用regExp?
答案 0 :(得分:1)
好的,你想要正则表达式吗?我会给你正则表达式:
var str = 'one OR " two OR " OR three OR five OR " OR six "';
var res = str.replace(/OR/g, '||');
console.log(res.replace(/(.*?)(\".*?)\|\|(.*?\")/g, '$1$2OR$3'));
享受MADI!
答案 1 :(得分:0)
我不会尝试使用单个正则表达式执行此操作,而是将工作分开:
spl = text.split(/(".*?")/);
result = "";
spl.forEach(function (piece) {
if (~piece.indexOf('"')) {
result += piece;
}
else {
result += piece.replace("OR", "||");
}
});
答案 2 :(得分:-1)
使用此:
var str = 'one OR " two OR " OR three OR five OR " OR six "';
var res = str.replace(/or/gi,"||");
这将替换所有不区分大小写的or
个字。