字符串替换连续三个字符

dit*_*tto 1 javascript php jquery replace str-replace

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

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

PHP:

$url = strtolower(str_replace(" ", "-", splitstring($item->item)));
$url = str_replace("---", "-", $url);
Run Code Online (Sandbox Code Playgroud)

JS:

title = title.toLowerCase().replace(/ /g, '-');
title = title.replace(/---/g, '-');
Run Code Online (Sandbox Code Playgroud)

后者取代了这个:"text---something-else",所以他们需要.

Peb*_*bbl 5

使用正则表达式的力量:

preg_replace('/[ -]+/', '-', $str);
Run Code Online (Sandbox Code Playgroud)

要么:

str.replace(/[ -]+/g, '-');
Run Code Online (Sandbox Code Playgroud)

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

/[\s_-]+/
Run Code Online (Sandbox Code Playgroud)

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

作为在正则表达式中使用连字符时的警告,您应该确保它在[bracketed]组的末尾,[abc-]或者您需要使用反斜杠来逃避它,例如[a\-bc].这是因为正则表达式语法允许您匹配范围,例如0-9在这种情况下不会是您想要的范围.