gpt4 book ai didi

javascript - 仅用于数字和连字符的正则表达式

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:01:41 25 4
gpt4 key购买 nike

我正在尝试理解正则表达式,对于长度为 10 的数字我可以简单地理解

/^[0-9]{10}$/

连字符只有我能做

/^[-]$/

使用组表达式将两者结合起来

/^([0-9]{10})|([-])$/

这个表达式没有按预期工作,如果字符串无效,它会以某种方式匹配字符串的一部分而不是根本不匹配。

enter image description here

如何制作只接受“-”或 10 位数字的正则表达式?

最佳答案

将您的两个正则表达式完全按照您的方式组合起来会很好。换句话说,只需使用交替/管道运算符来组合

/^[0-9]{10}$/

/^[-]$/

原样,直接进入

/^[0-9]{10}$|^[-]$/
↑↑↑↑↑↑↑↑↑↑↑ ↑↑↑↑↑ YOUR ORIGINAL REGEXPS, COMBINED AS IS WITH |

这可以表示为

Regular expression visualization

那会很好用。正如其他人指出的那样,您不需要在字符类中指定连字符,所以

/^[0-9]{10}$|^-$/
↑ SIMPLIFY [-] TO JUST -

现在,我们注意到两个备选方案中的每一个都有一个 ^ 开头和一个 $ 结尾。这有点重复,而且它也使得很难立即看出正则表达式始终从头到尾匹配事物。因此,我们可以重写它,如其他答案中所述,通过从两个子正则表达式中取出 ^$ ,并使用分组运算符组合它们的内容 ():

/^([0-9]{10}|-)$/
↑↑↑↑↑↑↑↑↑↑↑↑↑ GROUP REGEXP CONTENTS WITH PARENS, WITH ANCHORS OUTSIDE

对应的可视化是

Regular expression visualization

这也可以正常工作,但您可以使用 \d 而不是 [0-9],因此最终的最简单版本是:

/^(\d{10}|-)$/
↑↑ USE \d FOR DIGITS

这可视化为

Regular expression visualization

如果出于某种原因您不想“捕获”该组,请使用 (?:,如

/^(?:\d{10}|-)$/
↑↑ DON'T CAPTURE THE GROUP

现在可视化显示该组未被捕获:

Regular expression visualization

顺便说一句,在您最初尝试组合这两个正则表达式时,我注意到您将它们括在括号中,如

/^([0-9]{10})|([-])$/
↑↑↑↑↑↑↑↑↑↑↑ ↑↑↑↑↑ YOU PARENTHESIZED THE SUB-REGEXPS

但实际上这不是必需的,因为竖线(“或”的替代)运算符已经具有低优先级(实际上它具有任何正则表达式运算符的最低优先级); “低优先级”意味着它只会在之后两边的事情都已经处理后才适用,所以你在这里写的是相同的

/^[0-9]{10}|[-]$/

然而,由于其他答案中提到的原因,它仍然不起作用,从它的可视化中可以清楚地看出:

Regular expression visualization

关于javascript - 仅用于数字和连字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38680966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com