我想要用空格分隔CSV字符串中的项目。那就是“123,456,789”=> “123,456,789”。我试过了,但是无法构建一个正则表达式来执行此操作。我读了一些帖子,并认为这样就可以了,但没有骰子。
text = text.replace(new RegExp(",\S", "g"), ", ");
有人能告诉我我做错了吗?
答案 0 :(得分:2)
你有两个问题:
",\\S"
而不仅仅是",\S"
\S
匹配除空白之外的其他字符,以便删除该字符并将其替换为逗号。解决这个问题的最简单方法是“捕获”它(通过将其放在括号中),然后将其重新放入替换中(使用$1
)。所以你最终得到的是:
text = text.replace(new RegExp(',(\\S)', "g"), ", $1");
然而,有一种稍微简洁的方式来编写它,因为JavaScript允许你在没有字符串的情况下编写正则表达式,方法是将它放在斜杠之间。方便的是,这不需要反斜杠转义,所以这个更短的版本也可以正常工作:
text = text.replace(/,(\S)/g, ", $1");
作为捕获的替代方法,您可以使用“零宽度前瞻”,在这种情况下基本上意味着“这一点必须在字符串中,但不要将其视为匹配的一部分我是更换”。为此,您使用(?=something)
;在这种情况下,你想要“向前看”是\S
,所以它是(?=\S)
,给我们这个版本:
text = text.replace(/,(?=\S)/g, ", ");
答案 1 :(得分:2)
您的代码中有2个错误:
\S
仅转换为S
,因为\S
不是有效的转义序列。因此,您的正则表达式变为/,S/g
,与您示例中的任何内容都不匹配。您可以转义反斜杠(",\\S"
)或使用正则表达式文字(/,\S/g
)。
完成此更正后,您将用逗号替换逗号后面的字符。例如,123,456,789
变为123, 56, 89
。有两种方法可以解决这个问题:
捕获非空格字符并在替换表达式中使用它:
text = text.replace(/,(\S)/g, ', $1')
使用否定前瞻断言(注意:这也匹配字符串末尾的逗号):
text = text.replace(/,(?!\s)/g, ', ')
答案 2 :(得分:1)
text = text.replace(/,(\S)/g, ', $1');
答案 3 :(得分:-1)
试试这个:
var x = "123,456,789";
x = x.replace(new RegExp (",", "gi"), ", ");