当前位置: 首页 > 知识库问答 >
问题:

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

傅新
2023-03-14

我有这个正则表达式:

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

这为我提供了许多我所需要的结果。但是,我无法检查一个条件:

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

我查看了这个,但是我无法理解它。这到底是怎么做到的。

共有3个答案

凌宏大
2023-03-14

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

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

查看regex演示

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

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

查看另一个正则表达式演示。

一些注意事项:

  • /在构造函数符号中使用时不需要转义
  • {1}总是冗余的,因为每个原子默认匹配一次
  • \\b需要双重转义,因为单词边界是文字\和字母b的组合,如果您使用"\b",它将匹配a返回空间字符
  • 注意:如果userName包含特殊的正则表达式字符,您最好考虑转义要解析为文字字符的变量内容。
余歌者
2023-03-14

这就是你要找的吗?

new RegExp("[a-zA-Z]{1}[/]{1}" + userName + "[/]{1}[a-zA-Z0-9-_]+[a-zA-Z0-9_]$", "i")
商德泽
2023-03-14

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

>

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

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

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

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

    正则表达式:

    newregexp(“[a-zA-Z]/”用户名“/[\w-][^-]$”,“i”)

    或者

    new RegExp(“[a-zA-Z]/”用户名“/[\w-]\w$”,“i”)如果最后一个字符严格在\w字符类中。

    Regex101演示1

    Regex101演示2

  •  类似资料:
    • 我试图使用正则表达式来检查字符串中的第一个和最后一个字符是否是a-z之间的字母字符。 我知道这与第一个字符匹配: 但是我如何检查最后一个字符呢? 这: 不起作用。我怀疑这两个条款之间应该有什么区别,但我不知道是什么!

    • 我使用正则表达式显示文件中的数据。我想用: 我用这个函数来提取数据: 我的目标是提取数据,然后用0修改最后14个数字。我想把修改写进文件里。例如:这个然后我想把它修改为

    • 这是我的用户名正则表达式,我想应用限制,只允许3个字符的最小值和15个字符的最大值。 此正则表达式验证低于标准 用户名可以由小写和大写组成 用户名可以由字母数字字符组成 用户名可以由下划线和连字符组成 不能是两个下划线、两个加高或两个空格 开头或结尾不能有下划线、hypen或空格

    • 问题内容: 我使用以下正则表达式而不限制任何字符长度 在上面,当我尝试将字符长度限制为如下所示的15个时,会引发错误。 请帮助我使上述regEx的字符数限制为15。 问题答案: 您不能将量词应用于锚点。相反, 要限制输入字符串的长度,请 在开头使用锚定先行: 另外,我假设您想将0个或多个字母或数字与匹配。它应该看起来像(即在此处使用字符类)。 为什么不最后使用限制量词,例如? 量词仅应用于左侧的子

    • 我想验证用户的输入,我使用以下(工作良好)作为regex。 但当我尝试所有我想要的角色时,就是这样。 它不起作用,我不知道为什么。此外,如果您能向我解释添加和有什么不同,我将不胜感激。另外,我尝试使用来代替空格,但仍然不起作用(我更喜欢使用空格,因为我想限制行的更改)。

    • 问题内容: 我想匹配字符串中最后一次出现的简单模式,例如 但是,如果字符串 很 长,则会生成大量匹配项。有没有更直接的方法来匹配第二次出现的“ AAAA”,还是应该使用此替代方法? 问题答案: 您可以使用表示行末字符: 另外,请注意,这是变量的坏名称,因为它隐藏了内置类型。要访问列表的最后一个元素,您可以使用index: