Соответствие символов с акцентом с Javascript regexes

Вот забавный фрагмент, с которым я столкнулся сегодня:

/\ba/.test("a") --> true
/\bà/.test("à") --> false

Однако

/à/.test("à") --> true

Во-первых, wtf?

Во-вторых, если я хочу совместить акцентированный символ в начале слова, как я могу это сделать? (Я бы очень хотел, чтобы избежать использования селекторов сверху, например /(?:^|\s|'|\(\) ....)

Ответы

Ответ 1

Это сработало для меня:

/^[a-z\u00E0-\u00FC]+$/i

С помощью здесь

Ответ 2

Причина, по которой /\bà/.test("à") не соответствует, заключается в том, что "à" не является символом слова. Управляющая последовательность \b соответствует только границе символа слова и символу без слова. /\ba/.test("a") соответствует символу слова "a". Из-за этого существует граница между началом строки (которая не является символом слова) и буквой "a", которая является символом слова.

Символы Word в JavaScript regex определяются как [a-zA-Z0-9_].

Чтобы соответствовать акцентированному символу в начале строки, просто используйте символ ^ в начале регулярного выражения (например, /^à/). Этот символ означает начало строки (в отличие от \b, которая соответствует любой границе слова в строке). Это самое основное и стандартное регулярное выражение, поэтому оно определенно не поверх.

Ответ 3

У также была проблема с символами без символов ASCII в regex, вы можете найти здесь здесь. Они не справляются с границами слов, но, возможно, дают вам полезные советы.

Существует еще одна страница, но он хочет совместить строки, а не слова.

Я не знаю и не нашел теперь, якоря для вашей проблемы, но когда я вижу, какие регулярные выражения монстра в моей первой ссылке используются, ваша группа, которую вы хотите избежать, не находится над вершиной и на мой взгляд, ваше решение.