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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Возможно \ S (без пробелов).
Поскольку \w соответствует только символам ASCII 48-57 ('0' - '9'), 67-90 ('A' - 'Z') и 97-122 ('a' - 'z'). Еврейские символы и другие специальные символы иностранных языков (например, умлаут-о или тильда-н) находятся за пределами этого диапазона.
Вместо сопоставления символов иностранного языка (их так много в разных диапазонах ASCII) вам может быть лучше поискать символы, которые очерчивают ваши слова - пробелы, кавычки и другие знаки препинания.
Возможно, двоеточие, ':', которое можно использовать для отделения URL-адреса от номера порта.
Взгляните на http://www.regular-expressions.info/refunicode.html.
Похоже, что для Unicode нет эквивалента \ w, но вы можете сопоставить отдельные буквы Unicode, чтобы вы могли его создать.
На этой странице есть более подробное объяснение и список шаблонов символов: regular-expressions.info/unicode.html
Проверьте этот SO-вопрос о JavaScript и Unicode. Похоже, что ответ Яна Гойвертса вселяет в вас некоторую надежду.
Обновлено: Но тогда кажется, что все браузеры не поддерживают \ p ... в любом случае. Этот вопрос должен содержать полезную информацию.
Печалька. \ p было бы именно так, как прописал врач.
Если вы создаете URL-адреса с неанглийскими буквами, возможно, вам стоит пересмотреть свое решение.
Если я правильно интерпретирую W3C, URL-адреса могут содержать только символы слов в латинском алфавите..
К сожалению, я не могу контролировать создание URL-адресов, и они почти всегда будут содержать символы на иврите.
Это неправда - разрешены и русские символы, и другие символы из других алфавитов.
Стандарт 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.
Я только что нашел XRegExp, который еще не упоминался, и он меня очень впечатлил. Это альтернативная реализация регулярного выражения, имеет плагин юникода и лицензируется по лицензии MIT.
Согласно веб-сайту, чтобы соответствовать символам Unicode, вы должны использовать такой код:
var unicodeWord = XRegExp("^\\p{L}+$");
unicodeWord.test("Русский"); // true
unicodeWord.test("日本語"); // true
unicodeWord.test("العربية"); // true
Я только что интегрировал этот инструмент в наш проект, и он работает хорошо.
Попробуйте это \ p {L} регулярное выражение юникода в буквы
Спасибо, что касается внутренних частей URL-адреса, я в итоге сопоставил все, кроме пробела, '.' а также '/'. Что-нибудь еще мне может не хватать?