Регулярное выражение Javascript "Символ с одним пробелом"

Я изучаю JavaScript и анализирую существующие коды.

В моем справочнике по JS говорится, что нужно искать в одном месте "\s"?

Но я наткнулся на код

obj.match(/Kobe Bryant/);

Вместо того, чтобы использовать \s, он использует реальное пространство?

Почему это не генерирует ошибку?

5 ответов

Решение

Класс персонажа \s не только содержит символ пробела, но также и другие символы пробела Unicode. \s эквивалентно этому классу символов:

[\t\n\v\f\r \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]

Нет. Совершенно законно включать буквенное пространство в регулярное выражение.

Тем не менее, это не эквивалентно - \s будет включать любые пробельные символы, включая символы табуляции, неразрывные пробелы, пробелы полуширины и другие символы, тогда как литеральный пробел будет соответствовать только обычному пробелу.

\s соответствует любому символу пробела, включая символы табуляции и т. д. Конечно, вы можете использовать буквальное пространство также без проблем. Так же, как вы можете использовать [0-9] вместо \d для обозначения любой цифры.

В дополнение к обычным пространствам, \s соответствует различным видам пробелов, включая символы табуляции (и, возможно, символы новой строки, в зависимости от конфигурации). Тем не менее, сопоставление с нормальным пробелом, безусловно, допустимо, особенно в вашем случае, когда кажется, что вы хотите сопоставить имя, которое обычно разделяется обычным пробелом.

\xA0 также является пробелом, особенно неразрывным. У нас возникла проблема с редактором Quill, когда мы вставляли простой текст с пробелами из Notepad++. Пробел в JS \xA0 является пробелом, но не соответствует обычному пробелу \u0020 (' ').

Другие вопросы по тегам