如果出现多于 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个,则什么也不做,字符串中间和前面的*号不删除。