Javascript 正则表达式否定后视

标签 javascript regex regex-negation

我正在尝试找出正确的正则表达式以在 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/

相关文章:

javascript - React Native 的堆栈导航器和选项卡导航器出现问题

java - 正则表达式不搜索字符串

regex - 在perl中插入空格

java - RegExp - 替换精确的字符串

python - 正则表达式 (Python) : Matching Integers not Preceded by Character

bash - 使用sed从没有前缀或后缀的主机名变量中提取域

c# - 用正则表达式替换部分单词

javascript - 如何更改 JSPsych 中刺激呈现的权重?

javascript - 在 FF、Chrome 中工作但不能在 IE 中工作?怎么了?

javascript - Html 和 javascript 输入验证