Javascript 如何缩短这个正则表达式?

Javascript 如何缩短这个正则表达式?,javascript,regex,expression,Javascript,Regex,Expression,我希望字符串以大写字母开头,前两个字符应不包含NL,但其他字母如DE、BE等 下面是我在javascript中的实现方式 str.substring(0,2).match(/^[ABCDEFGHIJKLMOPQRSTUVWXYZ]+[ABCDEFGHIJKMNOPQRSTUVWXYZ]+$/) 我想把它缩短到范围。我试过使用这些范围表达式[A-MO-Z],[A-M][O-Z]+,但它们都不起作用 编辑: 我试过这些表达,但都不起作用 str.substring(0,2).match(/^[A-

我希望字符串以大写字母开头,前两个字符应包含NL,但其他字母如DE、BE

下面是我在javascript中的实现方式

str.substring(0,2).match(/^[ABCDEFGHIJKLMOPQRSTUVWXYZ]+[ABCDEFGHIJKMNOPQRSTUVWXYZ]+$/)
我想把它缩短到范围。我试过使用这些范围表达式[A-MO-Z],[A-M][O-Z]+,但它们都不起作用

编辑: 我试过这些表达,但都不起作用

str.substring(0,2).match(/^[A-MO-Z]+[A-KM-Z]+$/)
str.substring(0,2).match(/^[A-M][O-Z]+[A-K][M-Z]+$/)
str.substring(0,2).match(/^([A-M][O-Z])+([A-K][M-Z])+$/)

这是消极展望的主要用例:

str.match(/^(?!NL)[A-Z]{2}/)

请注意,这将允许
NA、NB、NC、
AL、BL、CL、
,而不是
NL

这是负面展望的主要用例:

str.match(/^(?!NL)[A-Z]{2}/)

请注意,这将允许
NA,NB,NC,
AL,BL,CL,
,只是不允许
NL

“但它们都不起作用。”---请证明它不
str.substring(0,2)。匹配(/^[A-MO-Z]+[A-KM-Z]+$/)
--它与原始表达式相同。如果将前两个字符与“NL”进行比较,然后(根据需要)使用一个简单的
/^[a-Z]+$/
,那么代码对读者(必须维护它的可怜的sap)来说不是更容易吗?将“我”添加到不允许列表时会发生什么?那个正则表达式会是什么样子?(另一方面,如果它很难写,那么可能它应该很难读,很难调试,很难修改。)@spencer7593-这是我会采取的方法,尽管Paulpro的答案更优雅。我认识的大多数JS程序员都不知道正则表达式语法的更高级的部分,所以我尽量避免使用它们。“但它们中没有一个是有效的。”---请演示它不
str.substring(0,2)。match(/^[A-MO-Z]+[A-KM-Z]+$/)
——它与您的原始表达式相同。如果将前两个字符与“NL”进行比较,然后(根据需要)使用一个简单的
/^[a-Z]+$/
,那么代码对读者(必须维护它的可怜的sap)来说不是更容易吗?将“我”添加到不允许列表时会发生什么?那个正则表达式会是什么样子?(另一方面,如果它很难写,那么可能它应该很难读,很难调试,很难修改。)@spencer7593-这是我会采取的方法,尽管Paulpro的答案更优雅。我认识的大多数JS程序员都不知道正则表达式语法的更高级的部分,所以我尽量避免使用它们。谢谢你的解决方案,但它不起作用。为NL和其他字母表提供null。为了我们这些可能需要阅读此内容并可能在将来更改此内容的人的利益,您是否介意添加一行注释来解释此操作。(前两个字符与“NL”不匹配,整个字符串为大写字母。)谢谢。:)@user2335977-
/^(?!NL)[A-Z]{2}/.test(“NL”)==false&&/^(?!NL)[A-Z]{2}/.test(“DE”)==true
。这就是你想要的,对吧?我不知道为什么,但是现在表达式[A-Z]{2}对我不起作用。我试过这个,但效果很好,不知道是什么原因。无论如何,谢谢。:-)@user2335977
[A-Z]+[A-Z]+
表示两个或多个字符的
[A-Z]{2,}
,而不是我在答案中输入的两个字符。谢谢你的解决方案,但它不起作用。为NL和其他字母表提供null。为了我们这些可能需要阅读此内容并可能在将来更改此内容的人的利益,您是否介意添加一行注释来解释此操作。(前两个字符与“NL”不匹配,整个字符串为大写字母。)谢谢。:)@user2335977-
/^(?!NL)[A-Z]{2}/.test(“NL”)==false&&/^(?!NL)[A-Z]{2}/.test(“DE”)==true
。这就是你想要的,对吧?我不知道为什么,但是现在表达式[A-Z]{2}对我不起作用。我试过这个,但效果很好,不知道是什么原因。无论如何,谢谢。:-)@user2335977
[A-Z]+[A-Z]+
表示两个或多个字符的
[A-Z]{2,}
,而不是我在答案中输入的两个字符。