javascript a到z不带B的正则表达式[已关闭]

nwlqm0z1  于 2023-01-08  发布在  Java
关注(0)|答案(2)|浏览(89)

19小时前关门了。
Improve this question
我专门在表达式中查找NOT b之类的内容...我知道/[ac-z]/之类的内容可以工作,但我查找/[a-z&[^b]]之类的内容,它表示匹配a-z,但不匹配b ...有人建议使用/[a-z&&[^b]]/,但引擎将&之后的[作为字符,而不是括号表达式。

xwbd5t1u

xwbd5t1u1#

您 * 可以 * 在模式开始时使用负向前看。例如:

^(?!.*b)[a-z]+$

它匹配除b之外的任何小写字母。(?!.*b)是一个否定的前瞻,它Assertb在字符串的任何地方都找不到。因此,尽管[a-z]+确实包括b,但如果模式发展到这一步,b已经被排除了。

vulvrdjw

vulvrdjw2#

有几种方法可以测试az,而不测试b

1.字符类中的间隙

用作字符类中的间隙:^[ac-z]+$。注意,该模式使用^$在字符串的开头和结尾锚字符串,这样可以避免像%xyz123这样的误报。

[ 'abcd', 'xyz' ].forEach(str => {
  console.log(str, '==>', /^[ac-z]+$/.test(str));
});

2.负前瞻

如Tim Biegleisen所述,使用消极前瞻:^(?!.*b)[a-z]+$。请注意,并非所有浏览器都支持lookahead/lookbehind,尤其是Safari。

[ 'abcd', 'xyz' ].forEach(str => {
  console.log(str, '==>', /^(?!.*b)[a-z]+$/.test(str));
});

3.逻辑或

使用逻辑为or的非捕获组:^(?:a|[c-z])+$

[ 'abcd', 'xyz' ].forEach(str => {
  console.log(str, '==>', /^(?:a|[c-z])+$/.test(str));
});

4.多个正则表达式

有时候,使用多个正则表达式进行逻辑组合会有帮助,比如A || B && !C,这主要在更复杂的情况下有用。

[ 'abcd', 'xyz' ].forEach(str => {
  console.log(str, '==>', /^[a-z]+$/.test(str) && !/b/.test(str));
});

***了解有关regex的详细信息:***https://twiki.org/cgi-bin/view/Codev/TWikiPresentation2018x10x14Regex

相关问题