我非常接近,但最后却无法弄明白。我试图让它只匹配没有连字符的数字。
例如,下面显示了括号中的所需匹配:
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()方法。
答案 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+$/, ''));
}