Javascript 正则表达式断言
Javascript RegEx assertion
我有这个例子:
/(?=\d)(?=[a-z])/.test("3a")
其中 returns false
但是这个
/(?=\d)(?=.*[a-z])/.test("3a")
有效。
你能解释一下吗?
你的第一个模式
/(?=\d)(?=[a-z])/.test("3a")
断言 数字和字母出现在 同一个地方 。显然,这永远不会是真的。另一方面,您的第二个模式:
/(?=\d)(?=.*[a-z])/.test("3a")
断言一个数字出现,并且它还断言一个字母出现在字符串中的任何位置。这匹配 3a
.
的输入
让我分解一下你在做什么:
Test string = test("3a")
示例 1:/(?=\d)(?=[a-z])/
(?=\d)
是下一个字符是数字的正向预测
(?=[a-z])
是下一个字符在 a-z
范围内的正向预测
这是不可能的,并且总是 return 错误,因为它断言下一个字符既是 a-z 又是数字,但它不可能是。
示例 2:/(?=\d)(?=.*[a-z])/
(?=\d)
是下一个字符是数字的正向预测
(?=.*[a-z])
是一个积极的前瞻,在匹配开始后的字符串中的任何地方都有一个字符在 a-z
范围内
这会在测试字符串中看到 3a
,因为从 3 开始匹配,下一个字符是数字,而 3a 满足 .*[a-z]
断言。
指出这一点可能重要也可能不重要,因为这些是前瞻性的,您实际上并没有匹配任何东西。我不知道你到底想做什么。
如果你想测试一个数字后面是否有 a-z 你可以把它放在一个断言中:
/(?=\d[a-z])/
我有这个例子:
/(?=\d)(?=[a-z])/.test("3a")
其中 returns false
但是这个
/(?=\d)(?=.*[a-z])/.test("3a")
有效。
你能解释一下吗?
你的第一个模式
/(?=\d)(?=[a-z])/.test("3a")
断言 数字和字母出现在 同一个地方 。显然,这永远不会是真的。另一方面,您的第二个模式:
/(?=\d)(?=.*[a-z])/.test("3a")
断言一个数字出现,并且它还断言一个字母出现在字符串中的任何位置。这匹配 3a
.
让我分解一下你在做什么:
Test string = test("3a")
示例 1:/(?=\d)(?=[a-z])/
(?=\d)
是下一个字符是数字的正向预测
(?=[a-z])
是下一个字符在 a-z
这是不可能的,并且总是 return 错误,因为它断言下一个字符既是 a-z 又是数字,但它不可能是。
示例 2:/(?=\d)(?=.*[a-z])/
(?=\d)
是下一个字符是数字的正向预测
(?=.*[a-z])
是一个积极的前瞻,在匹配开始后的字符串中的任何地方都有一个字符在 a-z
这会在测试字符串中看到 3a
,因为从 3 开始匹配,下一个字符是数字,而 3a 满足 .*[a-z]
断言。
指出这一点可能重要也可能不重要,因为这些是前瞻性的,您实际上并没有匹配任何东西。我不知道你到底想做什么。
如果你想测试一个数字后面是否有 a-z 你可以把它放在一个断言中:
/(?=\d[a-z])/