JavaScript - как проверить регулярное выражение, чтобы убедиться, что строка содержит хотя бы одну последовательность букв / цифр? - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь найти правильное регулярное выражение для обнаружения шаблона, который выглядит примерно как 2d1h30m10s, где любой из них действителен, например 1h или 1h30m или 30m или 10s или любой Сочетание тех. Является ли регулярное выражение правильным инструментом здесь?

Я пытаюсь понять это, и независимо от того, что я делаю, я продолжаю получать false из этих разных тестов:

/^(0?[1-9]|1[0-2][h])([1-6][0-9][m])([1-6][0-9][s])\d$/.test('2d1h10m10s')
/^(0?[1-9]|1[0-2][h])([1-6][0-9][m])([1-6][0-9][s])\d$/.test('10m10s')
/^(0?[1-9]|1[0-2][h])([1-6][0-9][m])([1-6][0-9][s])\d$/.test('10s')

Что мне здесь не хватает?

Ответы [ 4 ]

0 голосов
/ 15 января 2019

Я думаю, что вы ищете выражение:

/^((0?[1-9]|1[0-2])h)?((([0-5]?[0-9])|60)m)?((([0-5]?[0-9])|60)s)?$/

У вашего исходного выражения есть две основные проблемы: 1. \d в конце и 2. захват области (обратите внимание на дополнительные символы в моем выражении).

Это также захватит: 1h13s

0 голосов
/ 15 января 2019

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

Вам нужно взять [h] из одной из альтернатив - вы соответствуете 12h, но не 01h.

В конце не должно быть \d.

Вы не можете использовать однозначные минуты или секунды. Там также нет необходимости в 60 или 60 м, так как это 1 м и 1 ч.

/^((0?[1-9]|1[0-2])h)?([1-5]?[0-9]m)?([1-5]?[0-9]s)?$/

DEMO

Нет необходимости заключать h, m и s в квадратные скобки, так как они представляют собой одиночные символы.

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

0 голосов
/ 15 января 2019

Попробуйте:

^(\d{0,2}[hms]){0,3}$

примеры: https://regex101.com/r/NV6oEu/1

0 голосов
/ 15 января 2019

может быть, этот будет работать

\d+\w+

Если я правильно вас понимаю, вы пытаетесь проверить строку, содержащую символы, следующие за цифрами

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