开关案例正则表达式测试

时间:2014-02-11 06:33:18

标签: javascript regex switch-statement

var path = location.pathname;
 switch(path){
  case (/\/memberlist/).test(path) :getCSS('url-22.css'); break;
  case (/\/register/).test(path):  getCSS('url-6.css');  break;
  case (/buy-credits/g).test(path): getCSS('url-7.css'); break;
  case (/\/?u(\d+)friends$/).test(path): getCSS('url-8.css'); break;
  case (/\/privmsg/).test(path): getCSS('url-9.css'); break;
  case (/\/?u(\d+)wall$/).test(path): getCSS('url-4.css'); break;
 }
  function getCSS(url,media){
       var a = document.createElement('link');
           a.href=url;
           a.media= media || 'screen';
           a.rel="stylesheet";
     return (document.getElementsByTagName('head')[0].appendChild(a));    
  }

这是我的代码,由于某种原因,它没有运行应该运行的函数。出于测试目的,我们可以更改var path="/memberlist",但仍然无法运行。有人可以向我解释为什么这不会运行。不要真的使用switch语句

5 个答案:

答案 0 :(得分:9)

更改

switch(path){

switch(true){

正如你在线程中所看到的那样,我正在评论。

答案 1 :(得分:3)

没有发布的答案显示在开关案例中使用RegExp模式的正确方法,所以我想我发布了:



switch (myVar) {
   case 'case1':
      /...do work
      break
   case /[a-z]*/.test(myVar) && myVar:
      /...regex match, do work
      break
}




答案 2 :(得分:2)

switch-case不起作用。

regex.test()方法返回一个布尔值(true / false),你将它与输入字符串本身进行比较,对于任何case语句都不是这样。

您需要将switch-case转换为多个if / else if / else块才能执行您的逻辑。

答案 3 :(得分:2)

仅供记录,switch case可以改写为:

getCSS(
    /\/memberlist/).test(path)    && 'url-22.css' ||
    /\/register/).test(path)      && 'url-6.css'  ||
    /buy-credits/g).test(path)    && 'url-7.css'  ||
    /\/?u(\d+)friends$/)          && 'url-8.css'  ||
    /\/privmsg/).test(path)       && 'url-9.css'  ||
    /\/?u(\d+)wall$/).test(path)  && 'url-4.css'  || 
    'default'
);

或使用辅助对象重写getCSS

var path2url = {
   css: [
                {re: /\/register/, css: 'url-22.css'},
                {re: /buy-credits/g, css: 'url-6.css'},
                {re: /\/?u(\d+)friends$/, css: 'url-8.css'},
                {re: /\/privmsg/, css: 'url-8.css'},
                {re: /\/?u(\d+)wall$/, css: 'url-4.css'}
        ],
   getURL: function(path) {
     var i = this.css.length;
     while (--i) {
       if (this.css[i].re.test(path)) {
         return this.css[i].css;
       }
     }
     return null; // or something default
   }
};

function getCSS(path,media){
  var a = document.createElement('link');
  a.href= path2url.getURL(path); // <=
  a.media= media || 'screen';
  a.rel="stylesheet";
  return (document.getElementsByTagName('head')[0].appendChild(a));    
}

答案 4 :(得分:0)

看看

switch(str){
    case (/(abc|xyz)/.test(str) ? str : false):
        // Do some stuff
        break;
    default:
        // Do default stuff         
}
相关问题