我有一行数据,我想在公司名称周围添加双引号(" Test1,Inc")
原文:12345, 67890, Name \"The Name\", More Name, 99999, Test1, Inc, 2017-01-01 00:00:00
预期:12345, 67890, Name \"The Name\", More Name, 99999, "Test1, Inc", 2017-01-01 00:00:00
我无法完全理解它。 regex的任何专家都知道为什么?
let a = "12345, 67890, Name \"The Name\", More Name, 205298, Test1, Inc, 2017-01-01 00:00:00";
a= a.replace(/(,)(.*,.*Inc)(,)/g, `${'$1'}\"${'$2'}\"${'$3'}`)
console.log(a);
答案 0 :(得分:3)
您可以使用/([^, ]+,[^,]*Inc)/g
;这里使用[^,]
匹配非逗号字符:
let a = "12345, 67890, Name \"The Name\", More Name, 205298, Test1, Inc, 2017-01-01 00:00:00";
a= a.replace(/([^, ]+,[^,]*Inc)/g, '"$1"')
console.log(a);
答案 1 :(得分:2)
正则表达式中没有任何内容阻止.*
包含其他逗号。因此,第一个(,)
匹配字符串中的第一个逗号,(.*,.*Inc)
匹配最后一个Inc
的所有内容,第二个(,)
匹配后面的逗号。
将其更改为[^,]*
,以便它只匹配不包含其他逗号的名称。
也无需使用模板字符串进行替换。 $1
,$2
等不是变量,它们是通过replace()
方法实现的。
如果您不想在公司名称中包含空格,则应在第一个捕获组中包含\s*
。
let a = "12345, 67890, Name \"The Name\", More Name, 205298, Test1, Inc, 2017-01-01 00:00:00";
a= a.replace(/(,\s*)([^,]*,[^,]*Inc)(,)/g, '$1"$2"$3')
console.log(a);