我这里的第一个问题是我的克星正则表达式。
我需要一个正则表达式来用文本中的","
替换每个,
,而无需替换现有的,"
。
它看起来像这样:
以前:
abcd,efgh,ijkl,"","",mnop
后:
abcd","efgh","ijkl","","","mnop
我希望你能帮助我。
使用正则表达式解决问题很好,但现在你有两个问题。
一个不涉及使用正则表达式的简单解决方案是执行三个简单的字符串替换:首先将,
替换为","
然后将",""
替换为","
,最后用","
替换"","
。
让我们看看为什么这有效:
| after 1st | after 2nd | after 3rd
original | replacement | replacement | replacement
----------+-------------+-------------+-------------
a,b | a","b | a","b | a","b
m",n | m"","n | m"","n | m","n
x,"y | x",""y | x","y | x","y
查看实际操作:
const input = 'abcd,efgh,ijkl,"","",mnop';
const output = input.replace(/,/g, '","').replace(/",""/g, '","').replace(/"","/g, '","');
console.log(output);
注:注:上面的代码片段使用正则表达式,因为这是 JavaScript 实现"全部替换"功能的方式。当String.replace()
的第一个参数是字符串时,它仅替换其第一个匹配项。
我可以改用String.replaceAll()
(它适用于字符串(,但浏览器尚未广泛支持它。
粗略地说,我认为你追求的是这样的东西:
(?:(?<!"),"|(?<=")",(?!")|(?<!"),(?!"))
注意:正如@WiktorStribiżew在评论中提到的,您可以摆脱外部非捕获组:(?<!"),"|(?<=")",(?!")|(?<!"),(?!")
查看在线演示