无法使用javascript生成正则表达式

无法使用javascript生成正则表达式,javascript,regex,Javascript,Regex,我想为我的大学注册号做一个正则表达式。我成功了75%。我是新来的,我不知道怎么做。这就是我正在做的 <!DOCTYPE html> <html> <body> <script> str = "l1s10bscs"; //successfully tested //but i want to append any 4 digits at the end of l1s10bscs re = /[a-zA-Z]

我想为我的大学注册号做一个正则表达式。我成功了75%。我是新来的,我不知道怎么做。这就是我正在做的

<!DOCTYPE html>
<html> 
<body>

<script>
str = "l1s10bscs"; //successfully tested
                   //but i want to append any 4 digits at the end of l1s10bscs

re = /[a-zA-Z]\d{1}[s|S|f|F]\d{2}[bscs]/g;

result = re.test(str);

document.write(result);

</script>

</body>
</html>
根据你的描述,这个应该合适

我更改了以下内容:

  • [bscs]表示“b或s或c或s”(因此“b或s或c”,额外的s没有意义)。您只需要四个字符的字符串“BSC”
  • \d{1}与\d相同-这不是错误,但没有理由明确定义字符只出现一次
  • 您有一个\g标志,但没有\i,因此您可以在一个较大的字符串中多次匹配要查找的字符串,但您的搜索不区分大小写
  • [s | s | f | f]表示“s或|或s或|……”您的意思是“s或s或f……”,写在[sSfF]上
  • 由于\i用于使搜索不区分大小写,因此我将[sSfF]简化为[sf]

  • 无需将
    [BSC]
    置于方括号内:方括号表示
    b
    s
    c
    s
    。它在没有数字的情况下工作,因为它与“l1s10b”匹配,但下一个字符不是数字,因此查找4个数字失败。试试这个:

    re = /[a-zA-Z]\d{1}[s|S|f|F]\d{2}bscs[0-9]{4}/g;
    

    您似乎混淆了
    []
    ()

    ()
    创建一个组,而
    []
    表示“匹配内部的任何字母”

    [s | s | f | f]
    是指
    的“s”或“s”或“f”或“f”
    。这应该是
    (s | s | f | f)
    [sSfF]

    注意:可以使用
    i
    修饰符使其不区分大小写

    re = /[a-z]\d[sf]\d{2}bscs\d{4}/gi;
    

    不清楚你想匹配什么。你能给我们一组字符串来匹配你的正则表达式吗?1:l1s10bscs2034 2:L1F10BSCS1111它应该可以很好地处理这些类型的字符串。为什么你要用
    [0-9]{4}
    而不是
    \d{4}
    ?所以“BSC”应该总是按照这个顺序出现在字符串中?你可能想把它作为一个答案,@AmericanUmlaut。前一个匹配,即使它只匹配字符串“BSC”部分的第一个字符。您需要匹配BSC吗?省略
    ()
    也行吗?@Guvante你说得对,括号是不必要的。实际上我喜欢它们,因为它们清楚地描述了子字符串,但为了使正则表达式尽可能简单,我省略了它们。
    [s|f]
    的意思是
    “s”或“|”或“f”
    。这不应该是
    [sf]
    (s | f)
    ?@RocketHazmat-Yep。固定的。另外,我刚刚意识到没有理由为第一个数字显式定义{1}。@dEvILsadVocAte我不是正则表达式最佳实践方面的专家,但我会就以上给出以下反馈:正如Rocket Hazmat所说,将单个字符包装在[]中毫无意义。您从地址的本地部分排除了许多合法字符(如.-)(请参阅)。从技术上讲,电子邮件地址的本地部分(而不是域)是区分大小写的,尽管我认为通常将其视为不区分大小写。你不会认出googlemail.com,即使它相当于gmail.com。
    [s | s | f | f]
    不会做你认为它会做的事。是的,你是对的,
    字符不属于这里。
    []
    中的
    很好。让整个匹配不区分大小写可能是可以接受的,也可能是不可以接受的。@RocketHazmat我还有一个问题。如果我想限制电子邮件地址RE中的连字符“-”,我该怎么办?我的意思是电子邮件地址可以是字母数字类型,但在电子邮件中不能有其他字符,如连字符“-”,分号“;”和昏迷','。如何在RE中限制它们?@dEvILsadVocAte:在
    []
    中,
    ^
    字符表示“不”。例如,
    [^;]
    是“非
    的任何字符”。
    re = /[a-zA-Z]\d{1}[s|S|f|F]\d{2}bscs[0-9]{4}/g;
    
    re = /[a-z]\d[sf]\d{2}bscs\d{4}/gi;