正则表达式仅匹配最后一个破折号后的数字

时间:2015-08-19 21:04:18

标签: javascript regex

我非常接近,但最后却无法弄明白。我试图让它只匹配没有连字符的数字。

例如,下面显示了括号中的所需匹配:

one (no match)
one-1 (1)
one-two (no match)
one-two-2 (2)
one-two-23 (23)
one-two-23456 (23456)
one-two-three (no match)
one-two-three-1 (1)
one-two-three-23 (23)
one-0-two-three-2343 (2343)
one-0-44-2343233 (2343233)
one-0-two-three-234and324 (no match)

到目前为止,我尝试了几种模式,结果如下。

这是关闭但匹配包括连字符。​​

-\d+$

我也尝试了这个修复了连字符问题,但是在连字符后只匹配2位或更多位数。例如,它不会匹配" 1" in" one-1"但它会匹配" 12"在" one-12"。

[^-]\d+$

我想请注意,我使用的是javascript字符串replace()方法。

1 个答案:

答案 0 :(得分:2)

在支持lookbehinds的PCRE语言中,你可以简单地做一个积极的观察:

(?<=-)\d+$

示例:https://regex101.com/r/dW6wP3/1

但是,既然你正在使用Javascript(它不支持lookbehinds),你可以使用捕获组来获取你需要的东西:

(?:-)(\d+)$

示例:https://regex101.com/r/zP1cO6/1

您可以这样使用它:

var text = "one-two-23";
console.log(text.match(/(?:-)(\d+)$/)[1]); // 23

编辑:由于您正在尝试替换,这会改变一切。你需要这样做:

var text = "one-two-23";
if (/-\d+$/.test(text)) {
    console.log(text.replace(/\d+$/, ''));
}