Переключаться с частичными значениями / регулярными выражениями? - PullRequest
1 голос
/ 09 апреля 2011

Итак, допустим, у меня был этот переключатель:

switch(str){
  case "something": //a defined value
    // ...
  break;
  case /#[a-zA-Z]{1,}/ //Matches "#" followed by a letter
}

Я почти уверен, что вышеупомянутое почти невозможно ... но какой будет лучший способ достичь чего-тоаналогичный?Может быть, просто if..else..if с?Это было бы скучно ...

Так как бы вы этого добились?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2011

Вы можете получить совпадения для различных шаблонов, прежде чем начать переключение, и установите дела в индекс совпадения.

(Другие условия будет легче читать, если не более эффективно.)

//var str= 'something';
var str='#somethingelse';
var M=  /^(something)|(#[a-zA-Z]+)$/.exec(str);
if(M){
    switch(M[0]){
        case M[1]:
        // ...
        alert(M[1]);
        break;
        case M[2]:
        //...
        alert(M[2])
        break;
    }
}
0 голосов
/ 09 апреля 2011

Вы можете использовать одно регулярное выражение. Это не обязательно менее скучно, но оно выполняет свою работу.

var result = /(something)|(#[a-zA-Z]{1,})/.exec(str);
if (!result) {
    // Handle error?
} else if (result[1]) {
    // something
} else if (result[2]) {
    // #[a-zA-Z]{1,} 
}
...