切换部分值/正则表达式?

时间:2011-04-08 23:21:43

标签: javascript pattern-matching

所以我想说我有这个转换:

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

我几乎可以肯定上述内容几乎是不可能的......但是最好的方法是什么?也许只是简单的if..else..if?那太无聊了......

那么你将如何实现这一目标呢?

2 个答案:

答案 0 :(得分:0)

您可以使用单个正则表达式。它不一定不那么无聊,但它可以完成工作。

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,} 
}

答案 1 :(得分:0)

在开始切换之前,您可以获得各种模式的匹配, 并将案例设置为匹配的索引。

(如果效率不高,其他条件会更容易阅读。)

//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;
    }
}