Javascript неработающий коммутатор с регулярным выражением - PullRequest
4 голосов
/ 05 июля 2011

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

Не могли бы вы подтвердить это ограничение интерпретатора js и предложить обходной путь (я имею в виду не набор блоков if-then)?

Thx

пример (не дает ожидаемого ответа, например, 'case3'):

<script type="text/javascript">
var testme = "pwd_foo";
var response = false;
var reg = /^pwd.+/;

switch (testme) {
case 'pwd':
    response = 'case1';
    break;
case reg.test:
    response = 'case2';
    break;
case /^pwd.+/:
   response = 'case3';
   break;
default:
    response = 'do sthg else';
}

alert('reg test: ' + reg.test(testme)+'\nresponse:' + response);
</script>

Ответы [ 2 ]

9 голосов
/ 05 июля 2011

Ваши тесты на самом деле не поддаются переключению.Если необходимо, вы можете сделать это, что НЕ РЕКОМЕНДУЕТСЯ:

ДЕМО ЗДЕСЬ

var testme = "pwd_foo", response;
var reg = /^pwd.+/;

switch (true) {
case testme=='pwd':
    response = 'case1';
    break;
case reg.test(testme):
    response = 'case2';
    break;
default:
    response = 'do sthg else';
}

alert('reg test: ' + reg.test(testme)+'\nresponse:' + response);
1 голос
/ 05 июля 2011

Вы также можете использовать троичную для этого (но do см. отказ от ответственности здесь ):

var testme = "pwd_foo", 
    response = 
       testme === 'pwd' 
         ? 'case1' 
         : /^pwd.+/.test(testme) 
           ? 'case2' 
           : 'do something else';
...