Предположим, у меня есть строка, такая как 'a b xy c pq'
, и мне нужно написать регулярное выражение, чтобы метод match()
возвращал массив liek: ['a','b','xy','c','pq']
.Необходимое регулярное выражение Javascript
Давайте рассмотрим несколько примеров:
>>> 'x y z '.match(/\w{1,3}\s+/g)
['x ', 'y ', 'z ']
>>> 'x y z '.match(/(\w{1,3})\s+/g)
['x ', 'y ', 'z ']
Как вы можете видеть, даже когда я добавить круглые скобки, то она возвращает тот же результат. Я хочу, чтобы результат был без пробелов. Также было бы неплохо не добавлять конечное белое пространство в исходную строку.
Как вы думаете, я могу улучшить это регулярное выражение, чтобы получить то, что я хочу?
Обратите внимание, что я не хочу использовать exec()
, потому что его нужно запускать несколько раз, чтобы получить все совпадения.
отметить также, что эта проблема может быть легко решена с split()
>>> 'x y z'.split(/\s/)
['x', 'y', 'z']
>>> "a b xy c pq".split(/\s/)
['a','b','xy','c','pq']
Но, мне нужно также проверить строку. В каждом матче должно быть не более трех символов, и каждое совпадение должно быть буквенно-цифровым словом без специальных символов. Следовательно, я не могу использовать split()
, потому что в этом случае мне пришлось бы проверять каждое соответствие отдельно. Я хочу сделать все это с помощью одного регулярного выражения.
Причина, по которой я хочу сделать валидацию и разделение в одном регулярном выражении, состоит в том, что мне нужно сделать много из них в рамках события, поэтому мне нужно сделать это как можно быстрее.
Что случилось с тем, 'exec' должен быть запущен несколько раз? Разумеется, вы можете переместить его в _function_, если хотите сохранить эту конкретную область вашего кода чистой/сделать ее более читаемой. –
Множественные вызовы exec уменьшают производительность. И не забывайте, что вам нужно проверять 'lastIndex' на каждой итерации, что еще больше ухудшает скорость. – treecoder
Когда 'exec' продолжается, он правдивый, когда он заканчивается, он дает« null », поэтому, когда я его использую, я просто делаю' while (foo = re.exec (bar))/*, затем используйте */foo; ', no 'lastIndex' проверка –