2

RegExpが特殊文字を単語文字として認識しない(またはさらに悪いことに-としてカウントする\b)という問題があります:

"wäww, xöxx  yüyy zßzz".replace(/\b\w/g,function(m){return m.toUpperCase();})

戻る必要があります

"Wäww, Xöxx  Yüyy Zßzz"

しかし、残念ながら戻ります:

"WäWw, XöXx  YüYy ZßZz"

私はいくつかのエンコーディングで遊んだが、それは役に立たなかった...

どうすれば文字を認識させるか、そうでなければその問題を回避できますか?

同様の問題があり、満足のいく答えがない 質問があります。

4

7 に答える 7

2

浮気

unicodeとjsの微妙な違いを回避しようとする代わりに、置換/大文字化ロジックのマーカーとしてスペースを使用してください。

> "wäww, xöxx  yüyy zßzz".replace(/( |^)[^ ]/g,function(m){return m.toUpperCase();});
"Wäww, Xöxx  Yüyy Zßzz"

また

> "wäww, xöxx  yüyy zßzz".replace(/(\s|^)[^ ]/g,function(m){return m.toUpperCase();});
"Wäww, Xöxx  Yüyy Zßzz"

また

> "wäww, xöxx  yüyy zßzz".replace(/([\s\.,:;]|^)[^ ]/g,function(m){return m.toUpperCase();});
"Wäww, Xöxx  Yüyy Zßzz"

この種のテクニックは、アクセントのある文字を正しく大文字にします。

> "wäww, öhyes".replace(/( |^)[^ ]/g,function(m){return m.toUpperCase();})
"Wäww, Öhyes"
于 2012-10-27T19:36:08.933 に答える
1

私は別の観点から問題を攻撃することを選択しました。各単語の最初の文字を取得するにはどうすればよいですか。

これが私が思いついたものです:

"wäww, xöxx  yüyy zßzz".replace(/(?:^| )[^ ]/g,function(m){return m.toUpperCase();});

戻り値:

"Wäww, Xöxx  Yüyy Zßzz"
于 2012-10-27T19:39:09.963 に答える
1

Javascriptの計算ではなく、プレゼンテーションにのみ必要な場合は、CSSスタイルを設定します

text-transform: capitalize;

要素で動作します。

于 2012-10-27T19:40:17.407 に答える
0

検索し[^a-zA-Z ,]|[a-zA-z]て置き換えますx

これがここで機能しているのを見ることができます。

于 2012-10-27T19:23:28.420 に答える
0

正規表現を変更する必要があります。

"wäww, xöxx  yüyy zßzz".replace(/[\wäüßö]/g,"x")
于 2012-10-27T19:09:57.070 に答える
0

簡単な方法は、式を反転して、すべてのnone-word-charsを手動で定義することです(良くはありませんが便利です)

/[^\s,\.;+\- and much more]/g

あなたがすべての可能な単語文字を知っているなら、あなたはそれをすることができます

/[\wäöüßÄÖÜ and much more]/g

于 2012-10-27T19:14:19.433 に答える
0

JavaScriptの正規表現\wは、一致するASCII文字、一般的な数字、および下線文字のみとして扱われます。一般に、JavaScriptの正規表現はASCIIの世界で再生されます。

処理する「特殊」文字の数が少ない場合は、それらを個別にコーディングできますが、一般に、前述のJavascript + Unicode正規表現の質問への回答で示唆されているように、状況をより一般的に処理できるライブラリを探す必要があります。コメントで@Pumbaa80によって。

于 2012-10-27T19:26:27.800 に答える