正则表达式有一个例外 - 如果数字是下一个符号,则不要匹配所有内容

Regex with an exception - don't match all things if digit is next symbol

本文关键字:符号 有一个 如果 下一个 数字 正则表达式      更新时间:2023-09-26

再次嗨,我需要一点帮助来创建更好的正则表达式。我有以下文字:

Welcome.to-RegEx_r.v2.0.03.by.gski.v2.0.03 danner.com!bla-la_122.232-13!
我需要的是,删除所有点、破折号和下划线

,但如果有一个像"v2.0.03"这样的字符串来跳过删除点并从不是来自版本的 nex char 继续(点、破折号、下划线、字母/字符)所以字符串必须看起来像这样:

 Welcome to RegEx r v2.0.03 by gski v2.0.03 danner com!bla la 122 232 13!

我尝试并几乎可以使用这个正则表达式:

(['.'-'_])(?!['d])

但是,如果点、破折号或下划线之后的下一个字符是数字,则不起作用。 这是我在正则表达式中的尝试 - http://regexr.com/3b7qu

您可以使用此正则表达式:

var str = 'Welcome.to-RegEx_r.v2.0.03.by.gski.v2.0.03 danner.com!bla-la_122.232-13!';
str = str.replace(/(?:(v'd+(?:'.'d+)+) *)?[._ -]+/g, "$1 ");
//=> Welcome to RegEx r v2.0.03 by gski v2.0.03 danner com!bla la 122 232 13!

正则表达式演示

您可以使用以下正则表达式:

([.])(?!'d'd'b|'d'b)|[-_]

查看演示

但请注意,如果您的正则表达式引擎在展望中支持不同的模式长度,这将起作用。

另请注意,这将匹配不后跟 2 位数字或 1 位数字的点(使用单词边界拒绝匹配.232)或[-_]之一

试试看 (?<!v'd(.'d))(?<!v'd)['.'-_](由于许多引擎不支持 lookback 中的量词,我尝试了这种方式https://regex101.com/r/eH7jE0/1

此模式包括"v",因此它可能比没有它更健壮

相关文章: