我正在尝试找出正确的正则表达式,以便在javascript中执行此操作。在pcre中,这正是我想要的:
/^.*(?<!\/)kb([0-9]+).*$/im
目标:
然而,看起来虽然这在pcre中起作用,但由于否定的语法,它在javascript中不起作用:
(?<!\/)
我一直试图在regex101中解决这个问题,但还没有运气。关于javascript中纯正则表达式的等价物的任何想法或建议?
我看到有一个负面的预测,但我似乎无法弄明白:
/^.*(?!\/KB)kb([0-9]+).*$/im
答案 0 :(得分:4)
使用以下正则表达式匹配正确的文本:
/(?:^|[^\/])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+"'") };
}
答案 1 :(得分:2)
试试这个
a = /^(?!\/KB)kb([0-9]+)$/i.test('KB12345')
b = /^(?!\/KB)kb([0-9]+)$/i.test('http://someurl.com/info/KB12345')
c = /^(?!\/KB)kb([0-9]+)$/i.test('/KB12345')
console.log(a);
console.log(b);
console.log(c);