#javascript #regex
#javascript #регулярное выражение
Вопрос:
Я хочу сопоставить строку like [[[[145.139038,-37.933533],[145.084]]]]
.
Итак, у меня есть следующее регулярное выражение: ^[{2,}(d|-|.|[|]|) ]{2,}$
, которое работает нормально. Но проблема возникает, когда у меня есть дополнительный символ в конце строки.
Например [[[[145.139038,-37.933533],[145.084]]]]}
, в этом случае. Затем он взрывается.
Кто-нибудь может мне помочь с этим?
Комментарии:
1. Большое спасибо за ваш ответ. Оно не соответствовало более крупной строке. Вот пример: regex101.com/r/5QOihq/3
2. Что такое
…
символ в вашем вводе?3. Opss my bad добавлен туда по ошибке. Спасибо, это сработало 🙂
Ответ №1:
Ваше регулярное выражение кажется неправильным, поскольку у вас пустое чередование. Многие односимвольные чередования могут быть выражены в классе символов [...]
.
Это регулярное выражение должно работать для ваших входных данных:
/^[{2,}([-d.[],s] )]{2,}$/g
Ответ №2:
Все зависит от того, чего вы хотите.
Проще всего удалить $
в самом конце, так как оно соответствует концу строки. Регулярное выражение будет: ^[{2,}(d|-|.|[|]|) ]{2,}
См.: https://regex101.com/r/5QOihq/1
Если вы хотите точно соответствовать вашей строке и разрешить как можно больше других символов после этого до конца строки, вы можете выбрать: ^([{2,}(d|-|.|[|]|) ]{2,}).*$
https://regex101.com/r/5QOihq/2
Обновлено после комментария с дополнительными примерами: [((?:[ -]?)d .[d…] ,s(?:[ -]?)d .[d…] (?:,sd .[d…] )?)]
https://regex101.com/r/5QOihq/6
Комментарии:
1. Большое вам спасибо за столь быстрый ответ. Но это не сработало для больших строк: ( regex101.com/r/5QOihq/5
2. Обновил ваш пример: regex101.com/r/5QOihq/6
Ответ №3:
Если вы просто хотите знать, почему механизм регулярных выражений считает это слишком
сложным, это потому, что точка .
совпадает со всеми другими
символами чередования. Поэтому, когда движок возвращается, ему приходится находить все комбинации
снова и снова.
^
[{2,}
( # (1 start)
d
| -
| . # <- dot matches d,-,[,]
| [
| ]
# | <- do not allow nothing really
) # (1 end)
]{2,}
$