【问题标题】:JavaScript Regex replace if more than n occurence如果出现多于 n 次,则 JavaScript 正则表达式替换
【发布时间】:2011-09-01 18:06:38
【问题描述】:

我有一个正则表达式,它用连字符替换所有非字母数字字符。

slugName = $(this).val().replace(/[^a-z0-9]/gi, '-');

这可以正常工作,但是由于这是从用户输入生成的,我最终可能会得到像 my-awesome-title---stuff 这样的结果,它本来可以输入为 my awesome title & stuff

如您所见,我现在有三个连续的连字符,它们作为一个漂亮的 URL 并不真正吸引人。

如果有连续的连字符行,有什么方法可以替换此类事件吗?

【问题讨论】:

  • 您还想从边缘修剪连字符吗? -still-not-pretty-
  • 学习正则表达式的好资源:regular-expressions.info

标签: javascript regex slug


【解决方案1】:

类似这样的:

slugName = $(this).val().replace(/[^a-z0-9]+/gi, '-');

应将一个或多个非字母数字字符实例替换为 1 个连字符。在这种情况下,“+”表示一个或多个实例。

【讨论】:

  • 补充一点,我怎样才能阻止这种情况发生在第一个和最后一个字符上?
【解决方案2】:

使用另一个正则表达式折叠多个破折号:

slugName = slugName.replace(/-+/g, '-');

【讨论】:

  • 额外的replace不需要,只需在cahr类定义后添加+即可:[^a-z0-9]+
  • 太真实了,为 npinti 的回答 +1。 :-)
【解决方案3】:

+ 添加到 char 类:

'my awesome title & stuff'.replace(/[^a-z0-9]+/gi, '-')

结果:

"my-awesome-title-stuff"

【讨论】:

    【解决方案4】:

    只需用一个连字符替换连续的连字符

    slugName = $(this).val().replace(/[^a-z0-9]/gi, '-').replace(/[\-]+/g, '-')
    

    【讨论】:

    • 额外的replace不需要,只需在cahr类定义后添加+即可:[^a-z0-9]+
    • 看到其他的,不需要额外的替换,显然我们可以添加一个+ 似乎停止倍数之类的?
    • 是的,你是对的,我很快就回答了,没有想到最简单的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2021-11-30
    • 2012-02-24
    • 1970-01-01
    • 2023-01-12
    相关资源
    最近更新 更多