有没有办法捕获和替换引号内包含的字符串中的所有逗号,而不是它之外的任何逗号。我想将它们更改为管道,但是:
/("(.*?)?,(.*?)")/gm
只获得第一个实例:
如果回调没问题,你可以这样做:
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
与正则表达式版本相比,这非常令人费解,但是,如果只是为了实验,我想这样做:
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