[英]Javascript - how do I check regex to ensure a string contains at least one sequence of letters/numbers?
[英]How do I use RegEx to find parens that contain BOTH numbers and letters, not just one or the other
在这个例子中...
(5) (dogs) (5 dogs) (dogs 5)
我只想匹配...
(5 dogs) -or- (dogs 5)
这些数字可以是任意数量的数字,包含逗号、小数点、数学运算符、美元符号等。我唯一需要注意的是同时存在数字和字母字符。
我从hrs 提供的示例的修改开始,将其用于 RegEx ...
\(((letter).*(number))\)|((number).*(letter))\)
只捕捉这个......
(number letter) -or- (letter number)
但不是...
(number) (letter)
通过将表达式修改为...
\(((^[a-zA-Z]).*(^[0-9]))\)|((^[0-9]).*(^[a-zA-Z]))\)
...但显然我不知道我在做什么。
您可以使用前瞻来断言每组括号中都有一个数字和一个字母:
\((?=[^)\d]*\d)(?=[^)a-z]*[a-z])[^)]+\)
这两个前瞻断言有一些非右括号字符,然后是一个数字(第一个前瞻(?=[^)\d]*\d)
)或一个字母(第二个前瞻(?=[^)az]*[az])
)。 [^)]+
然后匹配(
和)
之间的字符。
在 Javascript 中:
const str = '(5) (dogs) (5 dogs) (dogs 5)' const regex = /\((?=[^)\d]*\d)(?=[^)az]*[az])[^)]+\)/ig console.log(str.match(regex))
作为具有单个前瞻的替代方案:
\((?=[^)a-z]*[a-z])[^\d)]*\d[^)]*\)
解释
\(
匹配(
(?=
正前瞻
[^)az]*[az]
匹配除)
或 az 以外的任何字符,然后匹配 az)
关闭前瞻[^\d)]*\d
匹配除数字或)
以外的任何字符,然后匹配一个数字[^)]*
匹配除)
以外的任何字符\)
匹配)
const s = '(5) (dogs) (5 dogs) (dogs 5)'; const regex = /\((?=[^)az]*[az])[^\d)]*\d[^)]*\)/ig; console.log(s.match(regex));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.