Javascript使用正则表达式在公司名称周围添加双引号

时间:2017-11-23 00:45:41

标签: javascript regex

我有一行数据,我想在公司名称周围添加双引号(" 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);

2 个答案:

答案 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);