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