字符串替换连续三个字符

时间:2012-11-13 11:32:18

标签: php javascript jquery replace str-replace

我拥有的是"text - something else“,现在使用以下代码我可以将其转换为"text-something-else",但我对额外的替换感到不满意。

无论如何将每个合并为一行?

PHP:

$url = strtolower(str_replace(" ", "-", splitstring($item->item)));
$url = str_replace("---", "-", $url);

JS:

title = title.toLowerCase().replace(/ /g, '-');
title = title.replace(/---/g, '-');

后者替换了这个:"text---something-else",所以他们需要。

2 个答案:

答案 0 :(得分:5)

使用正则表达式的强大功能:

preg_replace('/[ -]+/', '-', $str);

或:

str.replace(/[ -]+/g, '-');

上面显然会用单个连字符替换任意数量的连字符或空格,这与之前的逻辑略有不同。如果您想考虑任何其他角色,您可以轻松地执行以下操作:

/[\s_-]+/

以上将匹配任何空格,连字符或下划线。

在正则表达式中使用连字符时,请注意,您应确保它位于[bracketed]组的末尾,即[abc-],否则您需要使用反斜杠将其转义,比如[a\-bc]。这是因为正则表达式语法允许您匹配0-9之类的范围,这些范围将不是您在此情况下的意图。

答案 1 :(得分:0)

尝试(我还没有测试过):

// php
$what_to_replace = array(" - ", " ");

// should process " - " first, so spaces around "-" should not be replaced twice
$url = strtolower(str_replace($what_to_replace, "-", splitstring($item->item)));

请参阅examples