2013-04-30 55 views
1

我想根據搜索文本的開頭將某個變量設置爲某些值。檢查文本是否以字符開頭,後跟數字

我目前有:

var action; 

switch (searchText.substr(0, 3).toUpperCase()) { 

    case 'ABC': 
     action = 'foo'; 
    break; 

    case 'CDE': 
     action = 'bar'; 
    break; 

} 

這工作。但我想擴展它,以便不僅僅檢查文本是否以ABC開頭,而應該是ABC +至少兩個數字,如ABC12。我將如何在我的開關盒內製作一個正則表達式來驗證它?

回答

5

您可以嵌入在switch語句中的正則表達式會在情況下返回不null

switch(true) { 

    case /^ABC\d\d/g.test(searchText): 
     action = 'foo'; 
    break; 

    case /^XYZ$/.test(searchText): 
     action = 'bar'; 
    break; 
} 

雖然我個人更喜歡桌子驅動的方法:

function firstMatch(text, mapping) { 
    for(var i = 0; i < mapping.length; i++) 
     if(mapping[i][0].test(text)) 
      return mapping[i][1]; 
} 

actions = [ 
    [/^ABC\d\d/g, 'foo'], 
    [/^XYZ\d\d/g, 'bar'], 
] 


action = firstMatch(searchText, actions) 
+0

謝謝,但是這會被硬編碼爲兩個數字,對吧? – Johan 2013-04-30 08:10:58

+0

@Johan:沒有。 '/^ABC\d\d/.test(x)'對於「ABC」返回true,並且對至少兩個數字(它只是忽略其餘部分)返回true。 – georg 2013-04-30 08:12:22

+0

不需要'g'標誌。 – MikeM 2013-04-30 08:12:42

2
searchText.toUpperCase().match(/^ABC\d{2,}$/) 

如果字符串通過結合使用switch(true)regex.testABC開始,幷包含至少2位

+0

你也想'​​toUpperCase()'字符串來掃描或使用不區分大小寫的標誌來匹配OP的原始代碼的行爲。 – alex 2013-04-30 07:59:05

+0

'$'可能是不需要的,因爲我們只查看文本的開頭。 – MikeM 2013-04-30 08:11:00

+0

@MikeM:好吧,我們在這裏不是爲了解決別人的問題,而是給予提示 – zerkms 2013-04-30 08:13:29

相關問題