【问题标题】:JavaScript equivalent for PHP preg_replacePHP preg_replace 的 JavaScript 等效项
【发布时间】:2011-10-28 02:26:47
【问题描述】:

我一直在寻找 PHP preg_replace 函数的 js 等效项,目前我发现的只是 string.replace

但是我不确定如何将我的正则表达式转换为 JavaScript。这是我的 PHP 代码:

preg_replace("/( )*/", $str, $str);

例如以下:

test   test   test test

变成:

test-test-test-test

有人知道我如何在 JavaScript 中做到这一点吗?

【问题讨论】:

    标签: php javascript regex preg-replace


    【解决方案1】:
    var text = 'test   test   test test',
        fixed;
    fixed = text.replace(/\s+/g, '-');
    

    【讨论】:

    • 你不需要在正则表达式两边加上引号吗?还是我感到困惑?
    • 不,这是一个正则表达式文字。如果我们将它括在引号中,JS 会将它视为一个常规字符串,这会导致空匹配,因为我们的text 变量中没有类似/\s+/g 的东西。更多信息请访问MDN
    • 感谢您的参考 :) 原来我很困惑
    【解决方案2】:

    javascripts string.replace 函数也采用正则表达式:

    "test    test  test    test".replace(/ +/,'-');
    

    http://jsfiddle.net/5yn4s/

    【讨论】:

      【解决方案3】:

      在 JavaScript 中,你可以这样写:

      result = subject.replace(/ +/g, "-");
      

      顺便问一下,您确定您发布了正确的 PHP 代码吗?它宁愿是:

      $result = preg_replace('/ +/', '-', $str);
      

      【讨论】:

      • 在这种情况下,( )*( *) 无关紧要,因为您不需要捕获组的内容,因此您根本不需要括号: result = subject.replace(/ */g, "-"); 会做同样的事情。
      • 我认为你应该使用+ 而不是*:你想匹配一个或多个空格,而不是零个或多个。我没有测试过这个,否则它可能会产生-t-e-s-t-t-e-s-t-t-e-s-t-t-e-s-t-
      【解决方案4】:

      请参阅 javascript replace 函数参考。

      在你的情况下,它类似于

      var result = str.replace(/\s+/g, '-');
      

      但这只替换了一个空格。现在正在努力:)

      【讨论】:

      • 全局替换需要/g
      • 并且需要替换为'-',而不是''
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 2010-12-14
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      • 2010-12-29
      • 2010-10-21
      相关资源
      最近更新 更多