带通配符的Javascript开关语句?

带通配符的Javascript开关语句?,javascript,jquery,wildcard,switch-statement,Javascript,Jquery,Wildcard,Switch Statement,如果我的javascript自动转到我的服务器,并以[49]的纯文本格式返回一个ID为49,有没有一种方法可以让我这样做。。。(我已经测试过了,但不起作用) 其中通配符是*,我想确保它包含在两个方括号内 因为我需要检查是否没有像error那样返回另一个单词,并且我保留默认值用于意外错误,有什么想法吗?:)谢谢 您可以尝试使用if-else和regex来匹配通配符模式 假设data=“[49]”或括号内的任何数字 if(/\[\d+\]/.test(data)){ //do somethi

如果我的javascript自动转到我的服务器,并以
[49]
的纯文本格式返回一个ID为
49
,有没有一种方法可以让我这样做。。。(我已经测试过了,但不起作用)

其中通配符是
*
,我想确保它包含在两个方括号内


因为我需要检查是否没有像
error
那样返回另一个单词,并且我保留
默认值
用于意外错误,有什么想法吗?:)谢谢

您可以尝试使用
if-else
regex
来匹配通配符模式

假设
data=“[49]”或括号内的任何数字

if(/\[\d+\]/.test(data)){
    //do something
}else{
    //default
}

简短回答:不,switch/case无法处理通配符


您可能应该在进入交换机之前进行一些预处理/健全性检查,或者干脆完全放弃它,因为它更适合于特定的案例场景,而不是处理简化的数据。Regexp将在这里更好地为您服务。

您可以明确地打开true,这将对每个case语句使用求值

switch (true) {
    case ((/^\[\d+\]$/).test(data)):
       //matches data;
       break;
    case (data == "something else"):
       //...
       break;
    default:
       //...
}
但是,如果少于4-5个案例,则最好使用if/else if/else if/else块

if ((/^\[\d+\]$/).test(data)) {
       //matches data;
} else if (data == "something else") {
       //...
} else {
       //...
}
我通常在服务/rest调用的响应方法中进行一些错误捕获,这样,如果出现错误,我几乎总是返回带有错误属性的正确json

try {
  if (response.responseText.indexOf("<html") >= 0) { 
    throw response.responseText;
  }

  var data = JSON.parse(response.responseText);
  if (data.error) 
    throw data.error;

  //handle response data object.
  if ((/^\[\d+\]$/).test(data)) {
    //matches data;
  } else if (data == "something else") {
    //...
  } else {
    //...
  }
} catch(err) {
  if (err && err.message) {
      //use err.message
  } else if (err && err.toString().indexOf("<html") >= 0) {
      //handle error text
  }
}
试试看{

如果(response.responseText.indexOf(“),您可以创建一个模式和相关回调的列表,并执行一个简单的循环并检查匹配项。例如:

    var patterns = [];

    function myCallback(){ document.write('myCallback!'); }
    function myOtherCallback(){ document.write('myOtherCallback!'); }
    function myLastCallback(){ document.write('You will never see me!'); }

    patterns.push({'pattern':new RegExp(/\[.+\]/),'callback': myCallback});
    patterns.push({'pattern':new RegExp(/.+/),'callback':myOtherCallback});
    patterns.push({'pattern':new RegExp(/A-Z{3}/),'callback':myLastCallback});

    var f = "[49]";
    for(var i=0;i<patterns.length;i++){
        if(patterns[i].pattern.test(f)){
            patterns[i].callback();
        }
    }

我只是将数据保存到一个var,然后将数据设置为其他值(如果正确的话;)干杯,它可以,看我之前的帖子…实际上它可以为开关处理true,然后计算每个case。它不必像其他语言中的case语句那样是固定值。哇!不错,我不知道。@Tracker1的答案应该是正确的,考虑到问题的标题。
    var patterns = [];

    function myCallback(){ document.write('myCallback!'); }
    function myOtherCallback(){ document.write('myOtherCallback!'); }
    function myLastCallback(){ document.write('You will never see me!'); }

    patterns.push({'pattern':new RegExp(/\[.+\]/),'callback': myCallback});
    patterns.push({'pattern':new RegExp(/.+/),'callback':myOtherCallback});
    patterns.push({'pattern':new RegExp(/A-Z{3}/),'callback':myLastCallback});

    var f = "[49]";
    for(var i=0;i<patterns.length;i++){
        if(patterns[i].pattern.test(f)){
            patterns[i].callback();
        }
    }
myCallback!myOtherCallback!