替换带引号的字符串中的所有逗号

时间:2013-10-31 14:59:14

标签: javascript regex

有没有办法捕获和替换引号中包含的字符串中的所有逗号,而不是它之外的任何逗号。我想将它们改为管道,但是这个:

/("(.*?)?,(.*?)")/gm

只获得第一个实例:

JSBIN

2 个答案:

答案 0 :(得分:5)

如果回调没问题,你可以选择这样的东西:

var str = '"test, test2, & test3",1324,,,,http://www.asdf.com';

var result = str.replace(/"[^"]+"/g, function (match) {
    return match.replace(/,/g, '|');
});

console.log(result);
//"test| test2| & test3",1324,,,,http://www.asdf.com

答案 1 :(得分:0)

与正则表达式版本相比,这是非常复杂的,但是,如果只是为了实验,我想这样做:

var PEG = require("pegjs");

var parser = PEG.buildParser(
    ["start = seq",
     "delimited = d:[^,\"]* { return d; }",
     "quoted = q:[^\"]* { return q; }",
     "quote = q:[\"] { return q; }",
     "comma = c:[,] { return ''; }",
     "dseq = delimited comma dseq / delimited",
     "string = quote dseq quote",
     "seq = quoted string seq / quoted quote? quoted?"].join("\n")
);

function flatten(array) {
    return (array instanceof Array) ?
        [].concat.apply([], array.map(flatten)) :
        array;
}

flatten(parser.parse('foo "bar,bur,ber" baz "bbbr" "blerh')).join("");
// 'foo "barburber" baz "bbbr" "blerh'

我不建议你在这种特殊情况下这样做,但也许会产生一些兴趣:)

PS。 pegjs可以在这里找到:(我不是作者,没有隶属关系,我只是喜欢PEG)http://pegjs.majda.cz/documentation