Javascript Регулярное выражение для пользовательского URL? - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть 3 сценария URL

  1. нормальные URL:
  2. URL с контекстной переменной:
  3. Весь URL является контекстной переменной:
    • {$ varContext.getProductUrl}

Я должен проверить входной URL-адрес, чтобы соответствовать вышеупомянутым 3 сценариям.

Я написал регулярное выражение, но это не работает для всех сценариев.

^((?:http(s){0,1}://[\\w\\-\\.:/\$\{\}=\?&]+)|(?:\{\$[a-zA-Z]+\.[a-zA-Z]+\}))$

Может ли кто-нибудь помочь с этим?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Помимо экранирования прямой косой черты после http://, вы избегаете обратной косой черты в классе символов.\\w будет соответствовать обратной косой черте и w.Эта часть \\-\\ будет соответствовать диапазону от \ до \, который будет соответствовать обратной косой черте.

Это будет соответствовать, например, http://w\.:/${}=?&

Кроме того, вы можете внести несколько корректировок вваше регулярное выражение

  • (s){0,1} можно записать как https?
  • Класс символов [\\w\\-\\.:/\$\{\}=\?&] можно записать как [\w.:/${}=?&-] без экранирования .$? и дефис может бытьперешел в начало или в конец.\\ будет соответствовать обратной косой черте.
  • Если вам не нужна группа захвата (), вы можете пропустить это и использовать только чередование |
  • Вы можете использовать /i чтобы получить нечувствительное к регистру совпадение и класс персонажа стал бы [a-z]
  • Избегайте точки \., чтобы буквально соответствовать ей

Например:

const regex = /^https?:\/\/[\w.:/${}=?&-]+|{\$[a-z]+\.[a-z]+}$/i;

См. Демоверсию Regex

0 голосов
/ 08 декабря 2018

Привет, ты сделал очень простую ошибку.Остановился на 1% от финишной черты.

^((?:http(s){0,1}:\/\/[\w\-\.:/\${}=\?&]+)|(?:{\$[a-zA-Z]+.[a-zA-Z]+}))$

- это тот, который вы только что забыли экранировать / для обозначения (среднего) литерала /.Ошибка появляется сразу после ^((?:http(s){0,1}:

В следующий раз используйте сайт, подобный Regex101, сайт, который поможет вам проверить свое регулярное выражение на случай, если вы не знали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...