Javascript 带有例外的正则表达式-don';如果数字是下一个符号,则不能匹配所有内容

Javascript 带有例外的正则表达式-don';如果数字是下一个符号,则不能匹配所有内容,javascript,jquery,regex,Javascript,Jquery,Regex,大家好,我需要一些帮助来创建更好的正则表达式。 我有以下案文: 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

大家好,我需要一些帮助来创建更好的正则表达式。 我有以下案文:

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])
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!

但若点、破折号或下划线后的下一个字符是数字,则不起作用。下面是我在regexr中的尝试-

您可以使用以下regex:

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

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


还请注意,这将匹配不后跟2位或1位的点(使用单词边界表示拒绝匹配
.232
)或
[-\u]

中的一个。您可以使用以下正则表达式:

([\.\-\_])(?![\d])
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!

试试看
(?
(因为许多引擎不支持lookback中的量词,所以我尝试了这种方法


此模式包含“v”,因此它可能比没有它时更健壮。

您运行的是哪个语言?jquery$(This).text($(This).text().replace(/([\.\-\)(?![\d])/g,”);效果很好,但没有抓住最后一点:@beBoss我很高兴;)它不能与
Welcome.to-RegEx\r.v2.0.03.by.gski.v2.0.03 danner.com一起工作!布拉拉尤12.23-13非常感谢。但是有没有办法匹配.234或.3456我只是好奇,我用jquery把这个匹配起来,回答得很好。如果它使用
la_12.23
而不是
la_122.232
,会给人留下深刻印象。Javascript根本不支持lookbehinds。是的,但是这个问题的第一个版本没有任何Javascript标记。很抱歉,我没有标记。谢谢你的回答,但是第二个“v2.0.03”中的第二个点也匹配:)第二个点在哪里匹配?被替换的字符串与您期望的不一样吗?不,请参阅第一篇文章,有两个字符串带有“v2.0.03”,您的第二个字符串是“v2.0 03”。啊,对不起,您是对的。我忽略了这一点。现在已经更正了。我尝试了你的代码,我认为这是最好的解决方案:))