Почему \ w соответствует только английским словам в регулярном выражении javascript?

Я пытаюсь найти URL-адреса в тексте, используя код javascript. Проблема в том, что используемое мной регулярное выражение использует \ w для сопоставления букв и цифр внутри URL-адреса, но оно не соответствует неанглийским символам (в моем случае - буквам иврита).

Итак, что я могу использовать вместо \ w для сопоставления всех букв на всех языках?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
10
0
8 398
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Возможно \ S (без пробелов).

Ответ принят как подходящий

Поскольку \w соответствует только символам ASCII 48-57 ('0' - '9'), 67-90 ('A' - 'Z') и 97-122 ('a' - 'z'). Еврейские символы и другие специальные символы иностранных языков (например, умлаут-о или тильда-н) находятся за пределами этого диапазона.

Вместо сопоставления символов иностранного языка (их так много в разных диапазонах ASCII) вам может быть лучше поискать символы, которые очерчивают ваши слова - пробелы, кавычки и другие знаки препинания.

Спасибо, что касается внутренних частей URL-адреса, я в итоге сопоставил все, кроме пробела, '.' а также '/'. Что-нибудь еще мне может не хватать?

Doron Yaacoby 29.12.2008 18:18

Возможно, двоеточие, ':', которое можно использовать для отделения URL-адреса от номера порта.

David Koelle 29.12.2008 23:18

Взгляните на http://www.regular-expressions.info/refunicode.html.

Похоже, что для Unicode нет эквивалента \ w, но вы можете сопоставить отдельные буквы Unicode, чтобы вы могли его создать.

На этой странице есть более подробное объяснение и список шаблонов символов: regular-expressions.info/unicode.html

enobrev 29.12.2008 19:42

Проверьте этот SO-вопрос о JavaScript и Unicode. Похоже, что ответ Яна Гойвертса вселяет в вас некоторую надежду.

Обновлено: Но тогда кажется, что все браузеры не поддерживают \ p ... в любом случае. Этот вопрос должен содержать полезную информацию.

Печалька. \ p было бы именно так, как прописал врач.

PEZ 30.12.2008 22:05

Если вы создаете URL-адреса с неанглийскими буквами, возможно, вам стоит пересмотреть свое решение.

Если я правильно интерпретирую W3C, URL-адреса могут содержать только символы слов в латинском алфавите..

К сожалению, я не могу контролировать создание URL-адресов, и они почти всегда будут содержать символы на иврите.

Doron Yaacoby 30.12.2008 18:40

Это неправда - разрешены и русские символы, и другие символы из других алфавитов.

VMAtm 19.04.2011 14:10

Стандарт ECMA 262 v3, который определяет язык программирования, широко известный как JavaScript, предусматривает, что \w должен быть эквивалентен [a-zA-Z0-9_], а \d должен быть эквивалентен [0-9]. \s, с другой стороны, соответствует пробелам как ASCII, так и Unicode в соответствии со стандартом.

JavaScript не поддерживает синтаксис \p для сопоставления вещей Unicode, поэтому нет хорошего способа сделать это. Вы можете сопоставить все символы иврита с помощью:

[\u0590-\u05FF]

Это просто соответствует любой кодовой точке в блоке на иврите.

Вы можете сопоставить любой символ слова ASCII или любой еврейский символ с помощью:

[\w\u0590-\u05FF]

Обратите внимание, что URI (как расширенный набор URL-адресов) указаны W3C, чтобы разрешить только символы US-ASCII. Обычно все остальные символы должны быть представлены в виде процентов:

In local or regional contexts and with improving technology, users might benefit from being able to use a wider range of characters; such use is not defined by this specification. Percent-encoded octets (Section 2.1) may be used within a URI to represent characters outside the range of the US-ASCII coded character set if this representation is allowed by the scheme or by the protocol element in which the URI is referenced. Such a definition should specify the character encoding used to map those characters to octets prior to being percent-encoded for the URI. // URI: Generic Syntax

Что обычно происходит, когда вы открываете URL-адрес с символами, отличными от ASCII, в браузере, они переводятся в нотацию% AB, которая, в свою очередь, является US-ASCII.

Если есть возможность повлиять на способ создания материала, лучшим вариантом было бы подчинить URL-адреса функции типа urlencode () во время их создания.

Я думаю, вы ищете это регулярное выражение:

^[אבגדהוזחטיכלמנסעפצקרשתץףןםa-zA-z0-9\s\.\-_\\/]+$

Добро пожаловать в Stack Overflow. Я никогда не пробовал, но א-ת тоже может работать, даже включая последние буквы - en.wikipedia.org/wiki/Unicode_and_HTML_for_the_Hebrew_alphab‌ et.

Kobi 16.09.2010 10:39

Я только что нашел XRegExp, который еще не упоминался, и он меня очень впечатлил. Это альтернативная реализация регулярного выражения, имеет плагин юникода и лицензируется по лицензии MIT.

Согласно веб-сайту, чтобы соответствовать символам Unicode, вы должны использовать такой код:

var unicodeWord = XRegExp("^\\p{L}+$");

unicodeWord.test("Русский"); // true
unicodeWord.test("日本語"); // true
unicodeWord.test("العربية"); // true

Я только что интегрировал этот инструмент в наш проект, и он работает хорошо.

Rbjz 16.09.2011 18:07

Попробуйте это \ p {L} регулярное выражение юникода в буквы

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