簡體   English   中英

將正則表達式拼湊在一起

[英]Piecing together a regular expression

在過去的幾天里,當我試圖拼湊一個更大的正則表達式時,我問了幾個JavaScript正則表達式問題,但是我仍然遇到一些麻煩,因此我將要詢問整個問題,這可能是我應該做的首先要做的。

本質上,我需要一個匹配以下所有內容的正則表達式:

  1. 空字符串。

  2. 一個字符串,至少包含一個字母數字字符,但不以+1開頭。

  3. 以+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]+代表選擇一個或多個從az ,從AZ或從09的字符

第二種情況: (?!\\+1).*[a-zA-Z0-9]+.*匹配不以+1(?!\\+1) )開頭的每個文本,后跟盡可能多的文本只要包含至少一個字母數字字符( .*[a-zA-Z0-9]+.*代表您想要的任何字符,請選擇0或多個,加上上面說明的正則表達式,再加上0或多個,則表示您想要的字符無論是什么字符

這兩種情況分別與您的規則#3#2相匹配。

規則#1? 在整個表達式的末尾,意味着所有這些都是可選的,因此它也可以是一個空字符串。

請注意一些事情,例如:

  • (?:something)用於匹配字符串,但不捕獲它。
  • (?!something)用於確保它與字符串不匹配
  • \\用於轉義特殊字符(例如+當您希望它們作為常規字符站立時
  • +用於表示前面的一項或多項
  • *用於表示零個或多個前一項

希望我有所幫助!

根據您最新的要求:

  1. 空字符串。
  2. 一個字符串,至少包含一個字母數字字符,但不以+1開頭。
  3. 以+1開頭並且至少還有1個字母數字字符的字符串。

這是我要用的:

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

在計划英語中,該正則表達式表示要查找以下字符串:

  1. 空,或
  2. 具有字母數字字符(也可以選擇以+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);

JSFiddle

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM