每次出现第二个字符后替换字符串

时间:2014-04-08 10:24:26

标签: javascript regex

使用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?

3 个答案:

答案 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", "||");
    }
});

http://jsfiddle.net/UkBZF/

答案 2 :(得分:-1)

使用此:

var str = 'one OR " two OR " OR three OR five OR " OR six "'; 
var res = str.replace(/or/gi,"||");

这将替换所有不区分大小写的or个字。