如果出现多于 n 次,则 JavaScript 正则表达式替换

Posted

技术标签:

【中文标题】如果出现多于 n 次,则 JavaScript 正则表达式替换【英文标题】:JavaScript Regex replace if more than n occurence 【发布时间】: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 【参考方案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]+ 看到其他的,不需要额外的替换,显然我们可以添加一个+ 似乎停止倍数之类的? 是的,你是对的,我很快就回答了,没有想到最简单的解决方案。

以上是关于如果出现多于 n 次,则 JavaScript 正则表达式替换的主要内容,如果未能解决你的问题,请参考以下文章

C语言试题六之使字符串的前导*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做。字符串中间和尾部的*号不删除。

给定一个不多于5位的正整数,求它是几位数并且按逆序分别输出每一位数字的C语言程序如何编写?

编写程序,输入一个不多于5位的正整数,要求:(1)输出它是几位数; (2)分别输出每一位数字?

C语言试题四十之使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。

C语言试题四十之使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。

2.给一个不多于5位的正整数,要求: ①求出它是几位数; ②分别输出每一位数字 ③按逆序输出各位数字。