这是它在 Perl 兼容的正则表达式中的样子(取自https://stackoverflow.com/a/4824952/377920):
(?:(?<!\d)\d{1,3}(?!\d))
但是,显然 Javascript 缺少一些正则表达式功能,所以这不起作用。
我正在尝试匹配两端可以有非白色字符的 1-3 个长连接数字。
例如“Road 12A55, 10020”将匹配 12 和 55。
这是它在 Perl 兼容的正则表达式中的样子(取自https://stackoverflow.com/a/4824952/377920):
(?:(?<!\d)\d{1,3}(?!\d))
但是,显然 Javascript 缺少一些正则表达式功能,所以这不起作用。
我正在尝试匹配两端可以有非白色字符的 1-3 个长连接数字。
例如“Road 12A55, 10020”将匹配 12 和 55。
你是对的,JavaScript 不支持lookbehinds。
看起来您正在尝试检测不超过 3 位数字的序列。根据周围的上下文,您可以使用它来代替:
/(?:^|\D)\d{1,3}(?:\D|$)/
您可以在没有后视的情况下重写表达式 - 只需确保获得第 1 组:
/(?:^|\D)(\d{1,3})(?!\d)/
Javascript 不支持look-behinds
,这就是您的正则表达式不起作用的原因。
你可以试试这个替代方案: -
/(?:^|\D)(\d{1,3})(?!\d)/
并得到group 1
.
这将返回 12 和 55:
var output = 'Road 12A55, 10020'.replace(/D+|\d{4,}/g, ' ').match(/\d+/g)
alert(output)