【问题标题】:Javascript replace function using regular expressions使用正则表达式的 Javascript 替换函数
【发布时间】:2013-04-08 21:17:26
【问题描述】:

我正在尝试使用 javascript 的替换函数来替换字符串。但它只是取代了第一个实例。所以当我使用正则全局表达式时,

var result = 'moaning|yes you|hello test|mission control|com on'.replace(/|/g, ';');

我得到:http://jsfiddle.net/m8UuD/196/

我想得到:

呻吟;是的你;你好测试;任务控制;com on

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    简单地逃离管道:

     'moaning|yes you|hello test|mission control|com on'.replace(/\|/g, ';');
    

    Here you'll find the list of regex special characters that you should generally escape.

    【讨论】:

    • @SamiyaAkhtar 只要确保你能接受答案就可以了
    【解决方案2】:
    var result = 'moaning|yes you|hello test|mission control|com on'.replace(/\|/g, ';');
    

    【讨论】:

      【解决方案3】:

      您也可以使用.split().join()

      'moaning|yes you|hello test|mission control|com on'.split('|').join(';')
      

      【讨论】:

      • 在这种情况下这可能是一个愚蠢的问题,但你知道这和replace 之间的任何“性能问题”与正则表达式吗?我知道这和替换都会有效地做同样的事情,我只是想知道。拆分然后加入是否“密集”?特别是与使用正则表达式相比?我敢肯定,无论哪种情况,它都不是那么重要,因为这是一个小字符串并且只执行一次,但我只是想我会问
      • @Ian: split/join 似乎要快一点,至少在 Chrome 上是这样的:jsperf.com/split-join-vs-regex2,但不是很多
      • 感谢您提供。我应该自己做的。当然,在 Firefox 上,我得到了相反的结果 :) 我想我想知道你是否知道“好吧,正则表达式是事先编译好的,因此它可以更快地执行”或类似的东西。而且我还想知道是否与字符串的大小有关。出于某种原因,我觉得 split/join 不如字符串大小增加那么好。
      • @Ian:对不起,我真的不知道。我认为创建数组和加入它会比正则表达式花费更多的时间,但它可能需要一个非常长的字符串:jsperf.com/split-join-vs-regex2/2
      【解决方案4】:

      您需要转义“|”喜欢:

      var result = 'moaning|yes you|hello test|mission control|com on'.replace(/\|/g, ';');
      

      http://jsfiddle.net/PM4PT/

      【讨论】:

        【解决方案5】:

        许多字符是保留的,因为在正则表达式中具有特殊含义,因此要使用其中一个,您需要通过在特殊字符之前放置反斜杠 \ 来“转义”它。它们是:

        (   start of a sub-expression
        )   end of a sub-expression
        {   start of repetition range
        }   end of a repetition range
        [   start of a character set
        ]   end of a character set
        +   one or more repetitions
        *   zero or more repetitions
        ^   start of string
        $   end of string
        |   "or" connection between alternatives
        \   start of special code or escape
        /   start or end of regexp pattern
        

        例如,匹配所有开放方括号的正则表达式是/\[/(注意反斜杠)。如果您需要查找反斜杠,则必须在其前面添加一个反斜杠(因此将其加倍)。

        不幸的是,没有预定义的 Javascript 函数用于“转义”所有特殊字符。

        【讨论】:

          猜你喜欢
          • 2014-06-01
          • 2017-10-07
          • 2011-02-24
          • 1970-01-01
          • 2014-01-26
          • 2010-11-12
          • 2016-09-23
          • 1970-01-01
          • 2012-05-08
          相关资源
          最近更新 更多