web-dev-qa-db-ja.com

アクセント付き文字とJavascript正規表現の一致

今日私が出会った楽しいスニペットは次のとおりです。

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

しかしながら、

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

まず、wtf?

次に、Wordの先頭でアクセント記号付きの文字に一致させたい場合、どうすればよいですか? (/(?:^|\s|'|\(\) ....のようなオーバーザトップセレクターの使用を避けたい)

52
nickf

これは私のために働いた:

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

here の助けを借りて

61
Wak

/\bà/.test("à")が一致しない理由は、「à」がWordの文字ではないためです。エスケープシーケンス_\b_は、Word文字の境界と非Word文字の間でのみ一致します。 「a」はWor​​d文字であるため、/\ba/.test("a")は一致します。そのため、文字列の先頭(Word文字ではない)とWord文字である文字 "a"の間に境界があります。

JavaScriptの正規表現の単語文字は_[a-zA-Z0-9_]_として定義されます。

文字列の先頭でアクセント記号付き文字に一致させるには、正規表現の先頭で_^_文字を使用します(例__/^à/_)。その文字は、文字列の先頭を意味します(_\b_は文字列内のWord境界で一致します)。これは最も基本的で標準的な正規表現であるため、絶対に超えてはなりません。

40
Riimu

スタックオーバーフローには、正規表現の非ASCII文字、それを見つけることができます here 。)という問題もありました。 。

別の page がありますが、彼は単語ではなく文字列を一致させたいと考えています。

私はあなたの問題のアンカーを知りませんし、今は見つけませんでしたが、最初のリンクのどのモンスターの正規表現が使用されているかを見ると、あなたが避けたいグループはトップではなく、私の意見ではありませんあなたのソリューション。

2
stema
const regex = /^[\-/A-Za-z\u00C0-\u017F ]+$/;
const test1 = regex.test("à");
const test2 = regex.test("Martinez-Cortez");
const test3 = regex.test("Leonardo da vinci");
const test4 = regex.test("ï");

console.log('test1', test1);
console.log('test2', test2);
console.log('test3', test3);
console.log('test4', test4);

WakとCourの答えから構築:

/^[\-/A-Za-z\u00C0-\u017F ]+$/

スペースやダッシュにも使用できます。

例:レオナルドダヴィンチ、マルティネスコルテス

1
Craig1123