javascript - 如何防止这个用空格替换连字符的正则表达式也用额外的连字符替换连字符?

标签 javascript regex

这个正则表达式:

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

将转换此:

The dog jumped over the lazy - chair

进入此:

the-dog-jumped-over-the-lazy---chair

如何修改它以便生成这个(只有一个连字符):

the-dog-jumped-over-the-lazy-chair

最佳答案

我假设您的实际输入是“狗跳过了懒惰的椅子”,连字符周围的空格被转换,因为没有其他原因该模式应该在那里匹配。

试试这个:

str.replace(/( +- *)|(- +)|( +)/g, '-').toLowerCase();

显式检查连字符两侧的空格字符串(第一个模式也被设计为消耗尾随空格),在此过程中仅消耗一个连字符。如果连字符已经存在且被空格包围,则该连字符将包含在匹配中,因此当写入连字符时,它只是一个“替换”;在这种情况下,只需删除空格,并通过替换操作重新创建连字符,因为它是作为表达式的一部分捕获的。

关于javascript - 如何防止这个用空格替换连字符的正则表达式也用额外的连字符替换连字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4328202/

相关文章:

javascript - JavaScript 中的事件处理

regex - 正则表达式替换中的Emacs正则表达式组

Java模式匹配除给定列表之外的任何字符序列

regex - 获取 erlang 中命名子模式的值

javascript - jQuery prependTo() 选择器

javascript - 在react-router路由中使splat可选

javascript - 在传单 map 中使用 KMZ 文件

javascript - 基于名称的复选框选择提示其他复选框选项

javascript - 使用正则表达式替换外部 span-tag

javascript - 字符串 (x,y) 到对象 {x, y}