1

这是它在 Perl 兼容的正则表达式中的样子(取自https://stackoverflow.com/a/4824952/377920):

(?:(?<!\d)\d{1,3}(?!\d))

但是,显然 Javascript 缺少一些正则表达式功能,所以这不起作用。

我正在尝试匹配两端可以有非白色字符的 1-3 个长连接数字。

例如“Road 12A55, 10020”将匹配 12 和 55。

4

4 回答 4

4

你是对的,JavaScript 不支持lookbehinds。

看起来您正在尝试检测不超过 3 位数字的序列。根据周围的上下文,您可以使用它来代替:

/(?:^|\D)\d{1,3}(?:\D|$)/
于 2013-02-07T19:41:31.010 回答
4

您可以在没有后视的情况下重写表达式 - 只需确保获得第 1 组:

/(?:^|\D)(\d{1,3})(?!\d)/
于 2013-02-07T19:41:49.223 回答
2

Javascript 不支持look-behinds,这就是您的正则表达式不起作用的原因。

你可以试试这个替代方案: -

/(?:^|\D)(\d{1,3})(?!\d)/

并得到group 1.

于 2013-02-07T19:42:48.727 回答
1

这将返回 12 和 55:

var output = 'Road 12A55, 10020'.replace(/D+|\d{4,}/g, ' ').match(/\d+/g)

alert(output)
于 2013-02-07T20:50:50.567 回答