6

基本的に2文字の単語を見つけるJavaScript正規表現があります。問題は、アクセント付きの文字を単語の境界として解釈することです。確かに、そのようです

単語境界 ("\b") は、片側に "\w" があり、反対側に "\W" がある 2 つの文字の間のスポットです (どちらの順序でも)。 "\W" に一致する文字列の先頭と末尾。 AS3 RegExp は、境界型の文字を含む単語に一致します

それ以来

\w は、アンダースコア ([a-zA-Z0-9_] の略) を含む任意の英数字 (単語文字) と一致します。\W は、単語以外の任意の文字に一致します ([^a-zA-Z0-9_] の略) http://www.javascriptkit.com/javatutors/redev2.shtml

明らかにアクセントのある文字は考慮されません。のような言葉で問題になりますMontréaléが単語境界と見なされる場合、はal2 文字の単語です。アクセント付き文字を許可する単語境界の独自の定義を作成しようとしましたが、単語境界は文字でさえないため、それを見つける方法が正確にはわかりません..

何か助けはありますか?

以下は、正規表現userInputを使用して 2 文字の単語を検索して見つける、関連する JavaScript コードです。re_state

var re_state = new RegExp("\\b([a-z]{2})[,]?\\b", "mi");
var match_state = re_state.exec(userInput);
document.getElementById("state").value = (match_state)?match_state[1]:"";
4

2 に答える 2

5

JavaScript の正規表現は、場合によっては非 ASCII 文字 ( など) を認識しますが、や\sに関してはどうしようもなく不十分です。それらを ASCII 単語文字以外のもので動作させたい場合は、別の言語を使用するか、Steve Levithan のXRegExpライブラリをUnicode プラグインとともにインストールする必要があります。\w\b

ところで、正規表現にエラーがあります。\bオプションの末尾のコンマの後にがありますが、前にある必要があります。

"\\b([a-z]{2})\\b,?"

角かっこも削除しました。コンマが正規表現で特別な意味を持っている場合にのみ必要になりますが、そうではありません。しかし、カンマを一致させる必要はまったくないと思います。\bあなたが単語の終わりにいることを確認するのに十分なはずです。また、コンマが必要ない場合は、キャプチャ グループも必要ありません。

"\\b[a-z]{2}\\b"
于 2010-09-12T07:27:22.447 に答える
-3

非 ASCII を使用するように JavaScript を設定しましたか? JavaScript を UTF-8 を使用するように設定することを提案するページは次のとおりです: http://blogs.oracle.com/shankar/entry/how_to_handle_utf_8

それは言います:

親ページのスクリプト タグに charset 属性 (charset="utf-8") を追加します。

script type="text/javascript" src="[path]/myscript.js"  charset="utf-8"
于 2010-09-12T05:10:14.863 に答える