首页 > 解决方案 > 正则表达式匹配一个数字但不在另一个数字内

问题描述

我有一个像这样的正则表达式:[^А-я]17[^\d] /gi在 Regex101.com 中带有“Javascript”风格。它在以下情况下正常工作:

часть 179-а
часть 17-а
часть 17-2-б
часть 17б
час17 а
часть 17К

它正确匹配第 2、3、4 和 6 行中的 17。也仅在 regex101 的单元测试中与 /i 一起使用。

我不需要找到数字在哪里,只需知道它在那里而不是另一个单词的一部分(但可以有后缀)。

小提琴中的相同正则表达式不起作用(在循环内)。它给出了第 1 行(出于某种原因)、第 3 行和第 6 行。第 2 行和第 4 行在哪里?

我究竟做错了什么?下面小提琴内的代码:

var inp = 17;
var rg = new RegExp("[^А-я]"+inp+"[^\d]", 'gi');
var tst = ["часть 179-а","часть 17-а","часть 17-2-б","часть 17б","часть а17 а","часть 17К"]
for (var i = 0; i<tst.length; i++) {
  if (rg.test(tst[i])) {
    console.log("Here"+(i+1));
  }
}

注意:我在 var 中需要 17,因为在真正的应用程序中有一个数字循环。

标签: javascriptregex

解决方案


似乎您应该使用的是消极的后视和消极的前瞻。

(?<!\d)17(?!\d)

https://regex101.com/r/x3vnYg/1


推荐阅读