RegExp для проверки целых десятичных чисел, смешанных со специальными символами

Мне нужно RegExp для проверки строк, которые должны состоять из допустимых целых десятичных чисел, включая ноль (0, 1, 12, 123, но не 00 или 0123), смешанных со специальным символом (например, x) в свободных вхождениях:

Примеры допустимых строк: 0, 1, 123, x, xx, x0, 0x, x0x, 0x0, xx123x0, x1000xx5xxx, ...

Недопустимые: 00, x00, 01, x01, ... и практически все, включая неверные числа (начинающиеся с 0, но не являющиеся нулевыми).

Я придумал следующее:

new RegExp('^0?$|^((?!0)[0-9]+|x0$|0x|x+)+$')

К сожалению, это не работает на 100%, например. допустимая строка не принимается: 0x0.

Спасибо за любую помощь!

🤔 А знаете ли вы, что...
JavaScript был первоначально создан для улучшения интерактивности веб-страниц.


52
3

Ответы:

Я думаю, это то, что вы хотите:

new RegExp('(^0(x\d+)?$)|(^[1-9]\d*$)')

Решено

Я получил это регулярное выражение для работы с каждым из ваших примеров:

new RegExp('^(((?<![0-9])([1-9][0-9]*)?[0-9]?)x*)+$')

Я должен отметить, что он основан на «негативном взгляде назад», который может не поддерживаться более старыми средами. Я еще не сталкивался с какими-либо проблемами совместимости при использовании его в современном браузере.

RegExr.com может быть весьма полезен для визуального объяснения каждой части регулярного выражения.