2011-12-12 32 views
0

OK正則表達式對我來說是最令人困惑的事情之一。我正嘗試在Javascript中執行此操作。我有一個搜索字段,用戶將輸入一系列字符。代碼要麼是:正則表達式在查找字符時分割數字字符串

999MC111

或只是

999MC

總是有2個字母字符。但前面可能有1-4個字符,最後可能有1-4個字符。

如果代碼ENDS帶有Alpha字符,那麼我運行某個ajax腳本。如果有數字+2個字母+數字....它運行一個不同的Ajax腳本。

我的掙扎是我知道\ d是2位數字....但它可能不總是2位數字。

那麼,我的正則表達式代碼將分裂成一個數組。或者其他的東西。

我認爲正確的正則表達式將是(/ ^([0-9] +)([A-ZA-Z] +)([0-9] +)$/

但我怎麼做確保在中間的只有2個字母字符?

感謝

回答

0

好了,所以我沒有真正關心的中間2個字符....所有真正重要的是第一組數字和最後一組數字(如果有的話)。

所以基本上我只是需要處理數字。所以我這樣做:

var lead = '123mc444'; //For example purposes 
var regex = /(\d+)/g; 
var result = (lead.match(regex)); 

var memID = result[0]; //First set of numbers is member id 
if(result[1] != undefined) { 
    var leadID = result[1]; 
} 
+0

[memID,leadID] = lead.match(/ \ d +/g); – renevanderark

1

你可以使用正則表達式/\d$/以確定它是否有一個小數結束。

\d匹配一個十進制的性格,$的結束相匹配字符串。/ char專業人員將表達方式包含在內。

嘗試在您的JavaScript控制檯中逐行運行此操作。

var values = ['999MC111', '999MC', '999XYZ111']; // some test values 

// does it end in digits? 

!!values[0].match(/\d$/); // evaluates to true 
!!values[1].match(/\d$/); // evaluates to false 
0

/^\d{1,4}[a-zA-Z]{2}\d{0,4}$/相匹配的一系列的1-4位,後面是一系列的2個字母字符,接着另一系列的0-4數字的正則表達式。

這個正則表達式:/^\d{1,4}[a-zA-Z]{2}$/匹配一系列的1-4位數字,後面只有2個字母字符。

+0

好吧,那麼我如何將我的字符串拆分爲數字,字母,數字?我嘗試過var lead = str.split(/^[a-zA-Z] {2} $ /),但是lead [0]返回整數 – swg1cor14

+0

您可以將離散捕獲組添加到上述正則表達式中,即:'/ ^( \ d {1,4})([a-zA-Z] {2})(\ d {0,4})$ /',然後使用JavaScript的string.replace()函數將每個捕獲組與源字符串轉換爲單獨的字符串變量看到這個jsFiddle的工作示例:http://jsfiddle.net/zXjF9/ – Aaron

+0

其實,使用此更新的示例:http://jsfiddle.net/TuEtG/。如果找到匹配的正則表達式,它只會分割字符串。 – Aaron

1

要指定必須使用括號{}標記的確切數量,因此,如果你知道有2個字母標記你把{2},如果你知道有可能是0-4個數字,你把{0,4}

^([0-9]{0,4})([a-zA-z]{2})([0-9]{0,4})$ 

上述正則表達式的計算結果如下:

  • 999MC ---> TRUE
  • 999MC111 - > TRUE
  • 999MA C111 ---> FALSE
  • MC ---> TRUE

表達爲捕獲組分裂通過分組子表達式來完成到括號

正如你可以在下面的鏈接查看:

http://regexr.com?2vfhv

你獲得此:

3捕獲組:
組1:([0-9]{0,4})
組2:([a-zA-z]{2})
組3:([0-9]{0,4})

相關問題