JavaScript的替代PHP preg_replace函数

34

我一直在寻找一个js版本的PHP preg_replace函数,目前我找到的是简单的string.replace

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

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

例如以下代码:

test   test   test test

变成:

test-test-test-test

有谁知道我如何在JavaScript中实现这个?

4个回答

48
var text = 'test   test   test test';
var fixed = text.replace(/\s+/g, '-');

你不需要在正则表达式周围加引号吗?还是我弄混了? - corn on the cob
1
不,这是一个正则表达式字面量。如果我们将其放在引号中,JS 将会把它当作一个常规字符串来处理,这会导致一个空匹配,因为我们的 text 变量中没有类似 /\s+/g 的东西。更多信息可以在MDN找到。 - ant_Ti
谢谢提供参考 :) 结果发现我有些困惑。 - corn on the cob

5

JavaScript中的string.replace函数也接受正则表达式:

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

http://jsfiddle.net/5yn4s/


2
在JavaScript中,您需要编写如下代码:
result = subject.replace(/ +/g, "-");

顺便问一下,你确定已经发布了正确的PHP代码吗?正确的代码应该是这样的:
$result = preg_replace('/ +/', '-', $str);

在这种情况下,( )*( *)都无关紧要,因为您不需要捕获组的内容,所以根本不需要括号:result = subject.replace(/ */g, "-");将完全达到相同的效果。 - stema
我认为你应该使用+而不是*:你想匹配一个或多个空格,而不是零个或多个。虽然我没有测试过,但否则它可能会产生-t-e-s-t-t-e-s-t-t-e-s-t-t-e-s-t- - Daan Wilmer

0

请参考JavaScript replace函数文档。

在您的情况下,它应该是类似于

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

但那只替换了一个空格。现在正在处理:)


1
需要在正则表达式中添加 /g 以进行全局替换。 - Michael Berkowski
需要用 '-' 替换,而不是 '' - mellamokb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接