匹配正则表达式的完整字符串无法正常工作

时间:2021-07-22 10:27:14

标签: javascript regex

我想针对正则表达式测试完整的字符串并返回 false 是否它没有通过测试

但似乎如果某些字符串通过了测试,我就会得到正确的

   const regexp = new RegExp(
  `^([\\\\a-z0-9+.-]+?:((?:[a-z0-9-._~!$&'()*+,;=:]|%[0-9A-F]{2})*)@)?((?:[a-z0-9-._~!$&'()*+,;=]|%[0-9A-F]{2})*)(?::(\\d*))?(\\/(?:[a-z0-9-._~!$&'()*+,;=:@\\/]|%[0-9A-F]{2})*)?|(\\/?(?:[a-z0-9-._~!$&'()*+,;=:@]|%[0-9A-F]{2})+(?:[a-z0-9-._~!$&'()*+,;=:@\\/]|%[0-9A-F]{2})*)(?:\\?((?:[a-z0-9-._~!$&'()*+,;=:\\/?@]|%[0-9A-F]{2})*))?(?:#((?:[a-z0-9-._~!$&'()*+,;=:\\/?@]|%[0-9A-F]{2})*))?$`,"i")

    regexp.test("/test{}") // output true

我希望测试是假的,因为“{}”不是 uri 中的有效标志

2 个答案:

答案 0 :(得分:0)

似乎我使用的正则表达式有几个捕获组

例如:^(imaCaptureGroup1)*(\w)$ 看到 (\w) 是“captureGroup2”所以当我做 regex.test("2")

即使我做了一个 ^ 所以我的正则表达式将强制以“imaCaptureGroup1”开头 因为它是一个捕获组,它只是跳过它并搜索下一个捕获组 (\w) 并正确返回 true

答案 1 :(得分:0)

将您的正则表达式放入 regex101 会显示找到了哪些部分。末尾的 {} 被忽略。

regex101 screenshot with your RegEx

这可能只是意味着您的正则表达式被过度设计了。目标是什么?
你想匹配什么模式?