是否有任何方法可以捕獲和替換引號中包含的字符串中的所有逗號,而不是引號外的任何逗號。我想改變他們的管道,然而這:替換帶引號的字符串中的所有逗號
/("(.*?)?,(.*?)")/gm
僅獲得第一個實例:
是否有任何方法可以捕獲和替換引號中包含的字符串中的所有逗號,而不是引號外的任何逗號。我想改變他們的管道,然而這:替換帶引號的字符串中的所有逗號
/("(.*?)?,(.*?)")/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
是可以使用'exec()'來實現這個而不是兩個'replace()'。 MDN說我可以用它來對一個字符串運行一個模式多次,但我不明白如何。 – 1252748
@thomas'exec'不會取代任何東西,所以您無論如何都需要這樣做。如果你正在搜索*一個*正則表達式,[這個閱讀](http://stackoverflow.com/questions/4476812/regular-expressions-how-to-replace-a-character-within-quotes?rq=1)可能會幫助你,但是,與PCRE相比,JS知道正常表達式有多糟糕(它缺乏很多向後看和向前看),那麼它可能不起作用。 – h2ooooooo
與正則表達式版本相比,這是非常複雜的,但是,我想這樣做,如果只是爲了實驗的目的:
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
你能給我們一些「之前和之後」的字符串,以便我們確定情況嗎?例如,字符串中是否可以有多個雙引號對,如果是這樣,它是否應該替換所有這些對中的逗號? – talemyn
@talemyn是的,那是真的。可能有多個帶引號的字符串。 – 1252748