【问题标题】:String Replace Three Characters in a Row字符串替换一行中的三个字符
【发布时间】:2012-11-01 20:07:49
【问题描述】:

我拥有的是"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",因此需要它们。

【问题讨论】:

  • 可以用php的trim()去掉空格,js不确定
  • 你为什么对多行代码不满意?
  • @Tivie 感觉很脏,我很想知道是否有更好的解决方案。
  • @Chaplin Ah...“美丽的代码”综合症。 =P 我觉得你是兄弟。我们大多数人都为此受苦。 pebbl 答案似乎是一个聪明的答案,虽然 str_replace 通常比 preg_replace 快。

标签: php javascript jquery replace str-replace


【解决方案1】:

使用正则表达式的力量:

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

或:

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

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

/[\s_-]+/

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

作为在正则表达式中使用连字符时的警告,您应该确保它位于[bracketed] 组的末尾,即[abc-],否则您需要使用反斜杠将其转义,例如[a\-bc] .这是因为正则表达式语法允许您匹配 0-9 等范围,这在这种情况下不是您想要的。

【讨论】:

    【解决方案2】:

    试试(我没有测试过):

    // 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

    【讨论】:

    • @Dinesh 你确定吗? ..从原始文本“text-something else”我想用“-”替换“-”,然后“其他”之间的空格也用“-”替换以获得“text-something-else”
    • 我认为他只关心 2 件事替换空格和三次破折号.. 如果他想替换更多,他可以将它们添加到数组中.. 无论如何他喜欢正则表达式答案..
    猜你喜欢
    • 1970-01-01
    • 2018-01-14
    • 2021-07-19
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 2021-06-15
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多