Javascript 正则表达式断言

标签 javascript regex assert

我有这个例子:

/(?=\d)(?=[a-z])/.test("3a") 返回 false 但是这个 /(?=\d)(?=.*[a-z])/.test("3a") 有效。

你能解释一下吗?

最佳答案

让我分解一下你在做什么:

Test string = test("3a")

示例 1:/(?=\d)(?=[a-z])/

(?=\d) 是正向预测,下一个字符是数字
(?=[a-z]) 是正向预测,表示下一个字符在 a-z 范围内

这是不可能的,并且总是返回 false,因为它断言下一个字符既是 a-z 又是不可能是的数字。

示例 2:/(?=\d)(?=.*[a-z])/

(?=\d) 是正向预测,下一个字符是数字
(?=.*[a-z]) 是一个积极的前瞻,在匹配开始之后的字符串中的任何位置都有一个字符在 a-z 范围内

这会在测试字符串中看到 3a,因为从 3 开始匹配,下一个字符是数字,并且 3a 满足 .*[a-z] 断言。

指出这一点可能很重要,也可能不重要,因为这些是前瞻,所以您实际上并没有匹配任何内容。我不知道你到底想做什么。

如果您想测试数字后面是否有 a-z,您可以将其放入一个断言中:
/(?=\d[a-z])/

关于Javascript 正则表达式断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48163195/

相关文章:

javascript - 错误 : Value for argument "value" is not a valid query constraint. 无法使用 "undefined"作为 Firestore 值

java - 递归断言汉诺塔中的移动次数

JAVA - Selenium WebDriver - 断言和等待

javascript - 如何合并两个 JavaScript 对象字面量

javascript - Bootstrap/JQuery : Cannot get modal to show

asp.net - 正则表达式只允许特定数字

c# - 如何使用正则表达式在动态字符串中查找值?

php - 正则表达式中的大于号和小于号

C++ 结构初始化断言失败

Javascript 数组在填充时显示 0 长度