[英]Piecing together a regular expression
在过去的几天里,当我试图拼凑一个更大的正则表达式时,我问了几个JavaScript正则表达式问题,但是我仍然遇到一些麻烦,因此我将要询问整个问题,这可能是我应该做的首先要做的。
本质上,我需要一个匹配以下所有内容的正则表达式:
空字符串。
一个字符串,至少包含一个字母数字字符,但不以+1开头。
以+1开头并且至少还有1个字母数字字符的字符串。
因此,一些示例如下:
"" = true
"+" = false
"+abc" = true
"abc" = true
"+1" = false
"+12" = true
"+2" = true
根据修改后的规定要求,您只想匹配:
空字符串, ^$
一个字符串,至少包含一个字母数字字符,但不以+1 ^(?!\\+1).*[a-zA-Z0-9]
开头^(?!\\+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.*[a-zA-Z0-9])
^(?:\\+1[a-zA-Z0-9]+|(?!\\+1).*[a-zA-Z0-9]+.*)?$
说明:
正则表达式在两种情况下分开: ( CASE1 | CASE2 )
第一种情况: \\+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由?
在整个表达式的末尾,意味着所有这些都是可选的,因此它也可以是一个空字符串。
请注意一些事情,例如:
(?:something)
用于匹配字符串,但不捕获它。 (?!something)
用于确保它与字符串不匹配 \\
用于转义特殊字符(例如+
当您希望它们作为常规字符站立时 +
用于表示前面的一项或多项 *
用于表示零个或多个前一项 希望我有所帮助!
根据您最新的要求:
这是我要用的:
/^([]|(\+1)?.*[a-zA-Z0-9]+.*)$/
在计划英语中,该正则表达式表示要查找以下字符串:
+1
开头) //var re = /(^$)/; //Matches empty
//var re = /(^[a-z0-9]+)/; //matches only string no plus
//var re = /(^\+([0a-z2-9])([a-z0-9].*)?)/; //Matches the + [not one] requirement
//Joined together with | for or
//Might be simplified more, but this works ;)
var re = /(^([a-z0-9]+.*|[a-z0-9]+.*|\+1[a-z0-9]+.*|\+([0a-z2-9])([a-z0-9].*)?)?$)/i;
function testIt( str, expected ) {
if( !!re.exec( str ) === expected ) {
console.info(str + "\tpassed" );
} else{
console.error(str + "\tfailed" );
}
}
testIt("", true);
testIt("+", false);
testIt("+abc", true);
testIt("abc", true);
testIt("+1", false);
testIt("+12", true);
testIt("+12_", true);
testIt("+2", true);
testIt("+2c", true);
testIt("+2_", false);
testIt("+007", true);
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.
让我们改写一下:
一个字符串,至少包含一个字母数字字符,但不以+1开头。
以+1开头并且至少还有 1 个字母数字字符的字符串。
再试一次 :
但不以+1 |开头 至少包含一个字母数字字符的字符串以+1 |开头的字符串 并且至少还有 1 个字母数字字符。
那么,这又使我们做什么呢?
没有。 您只想匹配一个空字符串。 我的意思是真的吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.