Javascript 拼凑正则表达式

Javascript 拼凑正则表达式,javascript,regex,Javascript,Regex,在过去的几天里,当我试图拼凑出一个更大的正则表达式时,我问了几个JavaScript正则表达式问题,但我仍然有一些问题,所以我将询问整个问题,这可能是我首先应该做的 本质上,我需要的是一个正则表达式,它将匹配以下所有内容: 空字符串 至少包含一个字母数字字符但不以+1开头的字符串 以+1开头的字符串,至少还有1个字母数字字符 以下是一些例子: "" = true "+" = false "+abc" = true "abc" = true "+1" = false "+12" = true "+

在过去的几天里,当我试图拼凑出一个更大的正则表达式时,我问了几个JavaScript正则表达式问题,但我仍然有一些问题,所以我将询问整个问题,这可能是我首先应该做的

本质上,我需要的是一个正则表达式,它将匹配以下所有内容:

空字符串

至少包含一个字母数字字符但不以+1开头的字符串

以+1开头的字符串,至少还有1个字母数字字符

以下是一些例子:

"" = true
"+" = false
"+abc" = true
"abc" = true
"+1" = false
"+12" = true
"+2" = true

根据您最新的要求:

空字符串。 至少包含一个字母数字字符但不以+1开头的字符串。 以+1开头的字符串,至少还有1个字母数字字符。 以下是我要使用的:

/^([]|(\+1)?.*[a-zA-Z0-9]+.*)$/
在plan english中,正则表达式表示查找字符串,该字符串为:

空的,或者 具有字母数字字符,也可以选择以+1开头
根据修改后的规定要求,您只希望匹配:

空字符串^$

至少包含一个字母数字字符但不以+1开头的字符串,^\+1.[a-zA-Z0-9]

以+1开头的字符串,至少还有1个字母数字字符,^\+1.*[A-zA-Z0-9]

综合起来,即:

^$|^(?!\+1).*[a-zA-Z0-9]|^\+1.*[a-zA-Z0-9]
或者,如果您愿意:

^($|(?!\+1).*[a-zA-Z0-9]|\+1.*[a-zA-Z0-9])
让我们重新表述一下:

至少有一个字母数字字符但不以+1开头的字符串。 以+1开头的字符串,至少还有1个字母数字字符

请重试:

但不以+1开头,至少有一个字母数字字符的字符串,以+1开头并至少有一个字母数字字符的字符串

那么这又让我们做了什么呢

没什么。你只想匹配一个空字符串。我是说真的吗?

^?:\+1[a-zA-Z0-9]+|\+1.[a-zA-Z0-9]+.*$

说明:

正则表达式分为两种情况:情况1 |情况2

第一种情况:\+1[a-zA-Z0-9]+匹配以+1开头并后跟一个或多个字母数字字符的每个文本[a-zA-Z0-9]+表示选择一个或多个从a到z、从a到z或从0到9的字符

第二种情况:\+1.*[a-zA-Z0-9]+.*匹配所有不以+1开头的文本\+1,后面跟任意数量的字符,只要它至少包含一个字母数字字符。*[a-zA-Z0-9]+.*表示从所需字符中选取0个或多个字符,再加上上面解释的正则表达式,再加上0个或多个字符

这两种情况分别符合规则3和规则2

规则1是由?在整个表达式的末尾,这意味着所有这些都是可选的,因此它也可以是空字符串

请注意以下事项:

?:某些内容用于匹配字符串,但不能捕获它。 ?!某些内容用于确保它与字符串不匹配 \用于转义特殊字符,如+当您希望它们作为常规字符站立时 +用于表示前面的一项或多项 *用于表示前一项的零个或多个
希望我能帮忙

第2点和第4点不是几乎相反,因此基本上彼此相等吗?你的例子与你的问题陈述相矛盾+abc满足可能性4,一个以+开头的字符串,至少还有一个字母数字字符。但是你说过这个例子应该是假的而不是匹配的。对不起,这是正确的。我更新了3+abc,应该是真的。为什么+1不匹配?它满足4。@Regexident您是对的,我考虑过这一点,并更新了要求。4现在不见了。实际上+1本身不应该匹配。Ehrr…*也匹配非字母数字字符。OP没有说不允许使用非字母数字,她只是说至少包含一个字母数字。@ean5533这与+1匹配,但不应该匹配,除非至少还有一个字母数字。允许使用非字母数字,这非常接近。+007与这个大图案不匹配。@epascarello这很接近,但不允许额外的非字母数字字符。@epascarello例如+12\u应该是真的。如果你最初的要求是这样的话;需求确实是这么说的,epascarello。这个答案在复制和粘贴过程中丢失了一些东西。我应该马上更正一下。我不确定这些条件在JavaScript中是否有效,但这似乎只是匹配了所有内容。编辑后,当我复制并测试它时,这似乎有效。谢谢,这正是我所寻找的。这种模式是错误的+11也将产生一场成功的比赛。我不确定你在这里得到了什么。是的,我想匹配空字符串。这将与一些验证一起工作,不需要字段,因此允许使用空字符串。
^($|(?!\+1).*[a-zA-Z0-9]|\+1.*[a-zA-Z0-9])
A string that contains at least one alpha-numeric character but does not start with a +1.  
A string that starts with +1 and has at least 1 more alpha-numeric character.