Вы не можете сделать это за switch
исключением случаев, когда вы делаете полное сопоставление строк; это делает сопоставление подстроки . (Это не совсем так, как указывает Шон в комментариях. См. Примечание в конце.)
Если вы счастливы, что ваше регулярное выражение в верхней части удаляет все, что вы не хотите сравнивать в своем совпадении, вам не нужно совпадение подстроки, и вы можете сделать:
switch (base_url_string) {
case "xxx.local":
// Blah
break;
case "xxx.dev.yyy.com":
// Blah
break;
}
... но опять же, это работает, только если это полная строка, которую вы соответствуете. Он потерпит неудачу, если base_url_string
, скажем, будет «yyy.xxx.local», тогда как ваш текущий код будет соответствовать этому в ветке «xxx.local».
Обновление : Хорошо, так что технически вы можете использовать switch
для подстроки соответствия, но я бы не рекомендовал его в большинстве ситуаций. Вот как ( живой пример ):
function test(str) {
switch (true) {
case /xyz/.test(str):
display("• Matched 'xyz' test");
break;
case /test/.test(str):
display("• Matched 'test' test");
break;
case /ing/.test(str):
display("• Matched 'ing' test");
break;
default:
display("• Didn't match any test");
break;
}
}
Это работает из-за того, как switch
работают операторы JavaScript , в частности два ключевых аспекта: во-первых, случаи рассматриваются в порядке исходного текста , и во-вторых, что выражения селектора (биты после ключевого слова case
) являются выражениями , которые оцениваются как этот случай. оценивается (не константы, как в некоторых других языках). Так как наше тестовое выражение имеет значение true
, первое case
выражение, которое приводит к получению, true
будет тем, которое будет использовано.
switch(true) { case /foo/.test(bar): ....
true
вы просто оставляете все это вместе.RegExp может использоваться для входной строки не только технически, но и практически вместе с
match
методом.Поскольку выходные данные
match()
являются массивом, нам нужно получить первый элемент массива результата. Когда совпадение не удается, функция возвращаетсяnull
. Чтобы избежать ошибки исключения, мы добавим||
условный оператор перед доступом к первому элементу массива и проверимinput
свойство , являющееся статическим свойством регулярных выражений, которое содержит строку ввода.Другой подход заключается в использовании
String()
конструктора для преобразования результирующего массива, который должен иметь только 1 элемент (без групп захвата), и всю строку необходимо захватывать с помощью квантификаторов (.*
) в строку. В случае сбояnull
объект станет"null"
строкой. Не удобно.В любом случае, более элегантным решением является использование метода
/^find-this-in/.test(str)
with,switch (true)
который просто возвращает логическое значение, и его легче искать без учета регистра.источник
Просто используйте свойство location.host
источник
switch ("" + location.host)
.Другой вариант - использовать
input
поле результата соответствия регулярному выражению :источник
.length:
-> Если сопоставление установлено, троичное выражение возвращает исходный токен
----> Исходный токен оценивается регистром
-> Если совпадение не выполнено, троичное возвращает неопределенное значение
----> Кейс сравнивает токен с неопределенным, что, как мы надеемся, не является вашим токеном.
Тройной тест может быть чем угодно, например, в вашем случае
===========================================
это троичное выражение.
Тест в этом случае - token.match (/ spo /), который устанавливает соответствие строки, содержащейся в токене, с выражением регулярного выражения / spo / (в данном случае это буквальная строка spo).
Если выражение и строка соответствуют, это приводит к истине и возвращает токен (то есть строку, над которой работает оператор switch).
Очевидно, токен === токен, так что оператор switch совпадает, а регистр вычисляется
Проще понять, если вы посмотрите на него послойно и поймете, что тест Turnery оценивается «ДО» оператора switch, так что оператор switch видит только результаты теста.
источник
token.match(/spo/)
будет соответствовать.Это может быть проще. Попробуйте подумать так:
:
источник
TypeError: url.match(...) is null
Может быть уже поздно и все, но мне понравилось это в случае назначения :)
Вы можете продолжить, передать список параметров и обработать регулярное выражение с помощью |
источник
|| {}
бы|| [-1]
или аналогичный для безопасности типа. Кроме того, почемуnew RegExp
используется, а не просто косая черта?