我正在尝试找出正确的正则表达式以在 javascript 中执行此操作。在 pcre 中,这正是我想要的:
/^.*(?<!\/)kb([0-9]+).*$/im
目标:
- 如果我有一个没有以正斜杠为前缀的值,例如 KB12345,它将匹配其中的数字。
- 如果该值以正斜杠为前缀,它将不匹配,例如: http://someurl.com/info/KB12345
然而,虽然它在 pcre 中有效,但由于否定句法,它在 javascript 中无效:
(?<!\/)
我一直试图在 regex101 中解决这个问题,但还没有成功。关于 javascript 中的纯正则表达式等效项的任何想法或建议?
我看到有负面的前瞻性,但我似乎无法弄清楚:
/^.*(?!\/KB)kb([0-9]+).*$/im
最佳答案
使用以下正则表达式匹配正确的文本:
/(?:^|[^\/])kb([0-9]+)/i
参见 regex demo
详细信息:
(?:^|[^\/])
- 字符串或/
以外的字符的开头kb
- 文字字符串kb
([0-9]+)
- 第 1 组匹配 1 个或多个数字。
var ss = ["If I have a value that isn't prefixed with a forward-slash, e.g KB12345, it'll match the number within.","If that value is prefixed with a forward-slash it won't match, e.g: http://someurl.com/info/KB12345"];
var rx = /(?:^|[^\/])kb([0-9]+)/i;
for (var s of ss) {
var m = s.match(rx);
if (m) { console.log(m[1], "found in '"+s+"'") };
}
关于Javascript 正则表达式否定后视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45346875/