Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用正则表达式限制最后一个字符_Javascript_Regex - Fatal编程技术网

Javascript 如何使用正则表达式限制最后一个字符

Javascript 如何使用正则表达式限制最后一个字符,javascript,regex,Javascript,Regex,我有一个正则表达式: new RegExp("[a-zA-Z]{1}[/]{1}" + userName + "[/]{1}[a-zA-Z0-9-_]+$", "i") 这为我提供了许多我所需要的结果。但是,我无法检查一个条件: 我不希望我的最后一个字符是“-”。它可以出现在第二个“/”之后的任何位置,而不是最后一个字符。更准确地说,最后一个字符应该是任何[a-zA-Z0-9.],而不是连字符“-” 我退房了,但我无法控制住它。具体如何操作。在您的特定情况下,您可以在$之前添加单词边界,因为您

我有一个正则表达式:

new RegExp("[a-zA-Z]{1}[/]{1}" + userName + "[/]{1}[a-zA-Z0-9-_]+$", "i")
这为我提供了许多我所需要的结果。但是,我无法检查一个条件:

我不希望我的最后一个字符是“-”。它可以出现在第二个“/”之后的任何位置,而不是最后一个字符。更准确地说,最后一个字符应该是任何
[a-zA-Z0-9.]
,而不是连字符“-”


我退房了,但我无法控制住它。具体如何操作。

在您的特定情况下,您可以在
$
之前添加单词边界,因为您匹配的所有其他字符都是单词字符:

new RegExp("[a-zA-Z]/" + userName + "/[a-zA-Z0-9-_]+\\b$", "i")
                                                    ^^^^

否则,请使用消极前瞻,这是一种更通用的解决方案,无论您在此处匹配的字符是什么,它都会起作用:

new RegExp("[a-zA-Z]/" + userName + "/(?!.*-$)[a-zA-Z0-9-_]+$", "i")
                                      ^^^^^^^^ 

一些注意事项:

  • /
    在构造函数表示法中使用时不需要转义
  • {1}
    总是冗余的,因为默认情况下每个原子只匹配一次
  • \\b
    需要双重转义,因为单词边界是文字
    \
    和字母
    b
    的组合,如果您使用
    “\b”
    ,它将匹配退格字符
  • < > >强>注释< /强>:如果<代码>用户名包含特殊的正则表达式字符,则最好将其解析为文字字符。
在您的特定情况下,您可以在
$
之前添加单词边界,因为您匹配的所有其他字符都是单词字符:

new RegExp("[a-zA-Z]/" + userName + "/[a-zA-Z0-9-_]+\\b$", "i")
                                                    ^^^^

否则,请使用消极前瞻,这是一种更通用的解决方案,无论您在此处匹配的字符是什么,它都会起作用:

new RegExp("[a-zA-Z]/" + userName + "/(?!.*-$)[a-zA-Z0-9-_]+$", "i")
                                      ^^^^^^^^ 

一些注意事项:

  • /
    在构造函数表示法中使用时不需要转义
  • {1}
    总是冗余的,因为默认情况下每个原子只匹配一次
  • \\b
    需要双重转义,因为单词边界是文字
    \
    和字母
    b
    的组合,如果您使用
    “\b”
    ,它将匹配退格字符
  • < > >强>注释< /强>:如果<代码>用户名包含特殊的正则表达式字符,则最好将其解析为文字字符。
改进您的正则表达式
[/]{1}[a-zA-Z0-9-\]+$

  • 您不需要
    [/]{1}
    ,只需使用
    /
    (除了在由斜杠分隔的文本正则表达式对象中,在这种情况下,您需要对其进行转义
    \/

  • -
    字符类中的位置应在开头或结尾,以避免匹配ASCII范围。您使用了
    [a-zA-Z0-9-.]
    。相反,您可以只使用
    [\w-]
    \w
    是字符类
    [a-zA-Z0-9\
    的缩写

  • 它可以出现在第二个“/”之后的任何位置,而不是最后一个字符

    只需在末尾使用
    [^-]
    将最后一个字符
    设为非连字符

    Regex:

    newregexp(“[a-zA-Z]/”+userName+“/[\w-]+[^-]$”,“i”)

    newregexp(“[a-zA-Z]/”+userName+“/[\w-]+\w$”,“i”)
    如果最后一个字符严格在
    \w
    字符类中


    改进您的正则表达式
    [/]{1}[a-zA-Z0-9-\]+$

  • 您不需要
    [/]{1}
    ,只需使用
    /
    (除了在由斜杠分隔的文本正则表达式对象中,在这种情况下,您需要对其进行转义
    \/

  • -
    字符类中的位置应在开头或结尾,以避免匹配ASCII范围。您使用了
    [a-zA-Z0-9-.]
    。相反,您可以只使用
    [\w-]
    \w
    是字符类
    [a-zA-Z0-9\
    的缩写

  • 它可以出现在第二个“/”之后的任何位置,而不是最后一个字符

    只需在末尾使用
    [^-]
    将最后一个字符
    设为非连字符

    Regex:

    newregexp(“[a-zA-Z]/”+userName+“/[\w-]+[^-]$”,“i”)

    newregexp(“[a-zA-Z]/”+userName+“/[\w-]+\w$”,“i”)
    如果最后一个字符严格在
    \w
    字符类中


    如果最后一个字符与
    -
    不匹配,则必须从最后一个字符集中删除最后一个
    -

    new RegExp("[a-zA-Z]{1}[/]{1}" + userName + "[/]{1}[a-zA-Z0-9-_]+$", "i")
    
    改为

    new RegExp("[a-zA-Z]{1}[/]{1}" + userName + "[/]{1}[a-zA-Z0-9-_]+[a-zA-Z0-9_]$", "i")
    
    另外,
    {1}
    是没有用的,因为它是隐式的

    new RegExp("[a-zA-Z][/]" + userName + "[/][a-zA-Z0-9-_]+[a-zA-Z0-9_]$", "i")
    

    如果最后一个字符与
    -
    不匹配,则必须从最后一个字符集中删除最后一个
    -

    new RegExp("[a-zA-Z]{1}[/]{1}" + userName + "[/]{1}[a-zA-Z0-9-_]+$", "i")
    
    改为

    new RegExp("[a-zA-Z]{1}[/]{1}" + userName + "[/]{1}[a-zA-Z0-9-_]+[a-zA-Z0-9_]$", "i")
    
    另外,
    {1}
    是没有用的,因为它是隐式的

    new RegExp("[a-zA-Z][/]" + userName + "[/][a-zA-Z0-9-_]+[a-zA-Z0-9_]$", "i")
    

    这就是你要找的吗

    new RegExp("[a-zA-Z]{1}[/]{1}" + userName + "[/]{1}[a-zA-Z0-9-_]+[a-zA-Z0-9_]$", "i")
    

    这就是你要找的吗

    new RegExp("[a-zA-Z]{1}[/]{1}" + userName + "[/]{1}[a-zA-Z0-9-_]+[a-zA-Z0-9_]$", "i")
    
    或者干脆

    new RegExp("^[a-z]/" + userName + "/[\w-]*\w$", "i")
    
    也就是说,您的字符类
    [a-zA-Z0-9-\]
    与速记类
    \w
    -单词字符相同,加上连字符-
    [\w-]
    。用
    \w
    结束匹配将完成您想要的操作-不允许在末尾使用连字符

    在第一个正则表达式中,
    A-Z
    是不必要的,因为由于
    “i”
    标志,整个过程不区分大小写

    new RegExp("^[a-z]/" + userName + "/[\w-]*\w$", "i")
    
    也就是说,您的字符类
    [a-zA-Z0-9-\]
    与速记类
    \w
    -单词字符相同,加上连字符-
    [\w-]
    。用
    \w
    结束匹配将完成您想要的操作-不允许在末尾使用连字符


    在第一个正则表达式中,
    A-Z
    是不必要的,因为由于
    “i”
    标志,整个问题不区分大小写。

    这个问题只与JavaScript有关,我删除了Perl标记。但是,该解决方案不允许在字符串的最后部分有1个字符。这是不正确的<代码>[^-]是一个字符类,它是一种消费模式。只有零宽度断言解决方案是正确的:基于锚,wordbo