您可以分三步完成。
- 使用正则表达式全局替换将所有字符串正文内容提取到边表中。
- 做你的逗号翻译
- 使用正则表达式全局替换来交换字符串体
下面的代码
// Step 1
var sideTable = [];
myString = myString.replace(
/"(?:[^"\\]|\\.)*"/g,
function (_) {
var index = sideTable.length;
sideTable[index] = _;
return '"' + index + '"';
});
// Step 2, replace commas with newlines
myString = myString.replace(/,/g, "\n");
// Step 3, swap the string bodies back
myString = myString.replace(/"(\d+)"/g,
function (_, index) {
return sideTable[index];
});
如果你在设置后运行它
myString = '{:a "ab,cd, efg", :b "ab,def, egf,", :c "Conjecture"}';
你应该得到
{:a "ab,cd, efg"
:b "ab,def, egf,"
:c "Conjecture"}
它有效,因为在第 1 步之后,
myString = '{:a "0", :b "1", :c "2"}'
sideTable = ["ab,cd, efg", "ab,def, egf,", "Conjecture"];
所以 myString 中唯一的逗号在字符串之外。第 2 步,然后将逗号转换为换行符:
myString = '{:a "0"\n :b "1"\n :c "2"}'
最后,我们将仅包含数字的字符串替换为其原始内容。