2013-04-30 2 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 문에서 정규 표현식에 포함 할 수 있습니다를 ABC로 시작 포함되어있는 경우이 경우에는하지 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

+0

@Johan : 아니요. '/^ABC \ d \ d/test (x)'는 "ABC"에 대해 true를 반환하고 최소 두 개의 숫자 (나머지는 무시 함)를 반환합니다. – georg

+0

'g' 플래그가 필요 없습니다. – MikeM

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

문자열이 regex.test와 함께 switch(true)을 사용하여 적어도 2 자리

+0

또한 스캔 할 문자열을 'toUpperCase()'로 지정하거나 대소 문자를 구분하지 않는 플래그를 사용하여 OP의 원래 코드의 동작을 일치시킬 수 있습니다. – alex

+0

'$'는 아마도 텍스트가 시작되는 부분만을보고 있기 때문에 원치 않을 것입니다. – MikeM

+0

@MikeM : 음, 우리는 다른 사람들의 문제를 해결하지 않고 힌트를 제공하기 위해 여기에 있습니다. – zerkms

관련 문제