开关案例正则表达式测试

Eas*_*yBB 7 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));    
  }
Run Code Online (Sandbox Code Playgroud)

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

chi*_*rld 9

更改

switch(path){
Run Code Online (Sandbox Code Playgroud)

switch(true){
Run Code Online (Sandbox Code Playgroud)

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


Cor*_*son 6

发布的答案均未显示在开关盒中使用RegExp模式的正确方法,因此我认为我会发布:

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


anu*_*ava 2

switch-case不是这样的。

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

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