匹配不遵循字母表的数字并将它们放在捕获组中(全局)

时间:2017-08-13 07:19:54

标签: javascript regex

例如,如果我有这样的文字:

"hello800 more text 1234 and 567"

它应匹配1234567,而不是800(因为它跟随hello的{​​{1}},而不是数字。

它类似于编程语言,例如,在JavaScript中,o是一个变量,而abc123单独,不跟随文本,被视为数字。

请注意,我只想否定集50中的字符,而不是其他字符。例如,[A-Za-z]+33仍应返回-33

我的第一次试验是匹配NOT集:

33

这根本不起作用。

我的第二次尝试是扭转字符串并使用否定前瞻:

[^A-Za-z]([0-9]+)

仅当有1位数时才有效。 /([0-9]+)(?![A-Za-z])/g 1a不匹配(这很好),但1123a匹配(这很糟糕)。

3 个答案:

答案 0 :(得分:2)

您可以尝试以下正则表达式

\b\d+\b

您可以查看demo此处

另外如果你想匹配+33也可以试试正则表达式

\b[+-]*\d+\b

demo

答案 1 :(得分:1)

试试这个\b(\d+?)\b

  • \b检查单词边界(空格,结尾等等)
  • \d检查数字

Demo Here

答案 2 :(得分:1)



var str = "hello800 more text 1234 and 567 blah blah +33 end";
var result = str.match(/\b\d+\b/g);
console.log(result);




<强>解释

\b  : word boundary, make sure we don't have letter or digit before
\d+ : 1 or more digits
\b  : word boundary, make sure we don't have letter or digit after