[英]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.