javascript将所有出现的“,\ S”替换为“,\ S”

时间:2014-06-09 22:33:03

标签: javascript regex

我想要用空格分隔CSV字符串中的项目。那就是“123,456,789”=> “123,456,789”。我试过了,但是无法构建一个正则表达式来执行此操作。我读了一些帖子,并认为这样就可以了,但没有骰子。

 text = text.replace(new RegExp(",\S", "g"), ", ");

有人能告诉我我做错了吗?

4 个答案:

答案 0 :(得分:2)

你有两个问题:

  1. 反斜杠是一种痛苦,嗯,反斜杠;因为它们有很多含义(例如,为了让你在一个字符串中加上引号),你经常最终需要用另一个反斜杠来逃避反斜杠,所以你需要",\\S"而不仅仅是",\S"
  2. \S匹配除空白之外的其他字符,以便删除该字符并将其替换为逗号。解决这个问题的最简单方法是“捕获”它(通过将其放在括号中),然后将其重新放入替换中(使用$1)。
  3. 所以你最终得到的是:

    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个错误:

    字符串文字中的
  1. \S仅转换为S,因为\S不是有效的转义序列。因此,您的正则表达式变为/,S/g,与您示例中的任何内容都不匹配。您可以转义反斜杠(",\\S")或使用正则表达式文字(/,\S/g)。

  2. 完成此更正后,您将用逗号替换逗号后面的字符。例如,123,456,789变为123, 56, 89。有两种方法可以解决这个问题:

    1. 捕获非空格字符并在替换表达式中使用它:

      text = text.replace(/,(\S)/g, ', $1')
      
    2. 使用否定前瞻断言(注意:这也匹配字符串末尾的逗号):

      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"), ", ");