1

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

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

只获得第一个实例:

JSBIN

4

2 回答 2

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
于 2013-10-31T15:11:08.203 回答
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

于 2013-10-31T18:11:25.333 回答