用破折号代替连字符

时间:2019-03-03 11:25:46

标签: regex

替换每个。 (点)带有-(连字符),但点用数字包围时除外。例如:.a.b.1.2.应该变成-a-b-1.2-

我尝试了代码

/(^\.|\.$|\b\.\b)(?!\d\.\B)/gm

替代

-

返回结果

测试8/11:再次阅读任务说明。请勿触摸夹在数字之间的任何东西!

如何修改正则表达式?

正则表达式demo

2 个答案:

答案 0 :(得分:3)

尝试此正则表达式:

(?<=\D|^)\.|\.(?=\D|$)

并替换为-

说明:

只有4种情况下要匹配点:

  • 点前有一个非数字
  • 点是字符串的开头
  • 点后有一个非数字
  • 点是字符串的结尾

正则表达式只找到所有四种情况。

Demo

正如revo在评论中建议的那样,可以将其简化为:

(?<!\d)\.|\.(?!\d)

如果您的正则表达式引擎不支持向后看,则可以将它们替换为组:

(\D|^)\.|\.(\D|$)

并替换为$1-$2

答案 1 :(得分:0)

您可以使用此

(?<!\d|\.)\.+|\.+(?!\d|\.)
  • (?<!\d|\.)-负向后看。检查前面的字符不是数字
  • \.-匹配.
  • (?!\d|\.)-负向查找该字符是否不是数字

Demo