Почему мое регулярное выражение принимает \] [] _ ​​`[duplicate]

Давайте посмотрим на лес сначала, прежде чем смотреть на деревья.

Здесь есть много информативных ответов с большими подробностями, я не буду повторять ни одного из них. Ключ к программированию в JavaScript имеет сначала правильную ментальную модель общего исполнения.

  1. Ваша точка входа (ов) выполняется в результате события. Например, в браузер загружается тег сценария с кодом. (Соответственно, поэтому вам, возможно, придется заботиться о готовности страницы запускать ваш код, если он требует, чтобы элементы dom были сконструированы первыми и т. Д.)
  2. Ваш код выполняется до завершения, однако многие асинхронные вызовы, которые он делает, без выполнения каких-либо ваших обратных вызовов, включая запросы XHR, установку тайм-аутов, обработчиков событий dom и т. д. Каждый из этих обратных вызовов, ожидающих выполнения, будет находиться в очереди, ожидая, что их очередь будет запущена после других событий
  3. Каждый отдельный обратный вызов XHR-запроса, установленного таймаута или dom события после вызова будет завершен.

Хорошие новости заключается в том, что, если вы хорошо понимаете этот момент, вам никогда не придется беспокоиться о гоночных условиях. Прежде всего вы должны понимать, как вы хотите упорядочить свой код как по существу ответ на разные дискретные события, и как вы хотите объединить их в логическую последовательность. Вы можете использовать обещания или новые асинхронные / ожидающие более высокие уровни в качестве инструментов для этой цели, или вы можете откатывать свои собственные.

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

39
задан Guilherme Nascimento 30 May 2015 в 20:54
поделиться

6 ответов

[A-z] будет соответствовать символам ASCII в диапазоне от A до z, а [a-zA-Z] будет соответствовать символам ASCII в диапазоне от A до Z и в диапазоне от a до z. На первый взгляд это может показаться эквивалентным - однако, если вы посмотрите на эту таблицу символов ASCII, вы увидите, что A-z включает несколько других символов. В частности, это [, \, ], ^, _ и `` `(которые вам явно не нужны).

59
ответ дан Donut 25 August 2018 в 09:34
поделиться

Квадратные скобки создают класс символов, а дефис является сокращением для добавления каждого символа между двумя указанными символами. то есть [A-F] можно записать [ABCDEF].

Класс символов [A-z] будет соответствовать каждому символу между этими символами, который в ASCII включает в себя некоторые другие символы, такие как «[',' \ 'и'] '.

альтернативой заданию обоих случаев было бы установить регулярное выражение нечувствительным к регистру с помощью модификатора /i.

6
ответ дан a'r 25 August 2018 в 09:34
поделиться

Посмотрите на таблицу ASCII . Вы увидите, что между Z и a есть некоторые символы, поэтому вы будете соответствовать больше, чем вы намерены.

8
ответ дан darioo 25 August 2018 в 09:34
поделиться

Когда вы посмотрите на таблицу ASCII, вы увидите следующее:

A = 65
Z = 90
a = 97
z = 122

Итак, [A-z] будет соответствовать каждому символу от 65 до 122. Это включает в себя эти символы (91 -> 97 ):

 [\]^_`

Это означает, что [A-Za-z] будет соответствовать только алфавиту, без отмеченных символов

6
ответ дан Martijn Courteaux 25 August 2018 в 09:34
поделиться

Посмотрите на диаграмму ASCII (на основе которых лежат символы Java): между Z и a имеется довольно много символов пунктуации, а именно:

[\]^ _`
3
ответ дан Michael Borgwardt 25 August 2018 в 09:34
поделиться

Аг соответствует совпадению «от» до «z» AZ «A» до «Z» Az соответствует всем этим, а также символам между «Z» и «a», которые являются [] ^ / _ `

См. http://www.asciitable.com/

11
ответ дан Peter Lawrey 25 August 2018 в 09:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: