13

「Doe、John、A」(姓、名、ミドルネームのイニシャル)のような文字列があります。

文字列を「Doe*John*A」に変換する正規表現を書き込もうとしています。

ただし、この文字列のすべてのスペースを考慮に入れる必要があるため、「Doe、John、A」は引き続き「Doe * John*A」に変換されます。

また、文字列「DoeJohnA」は「Doe* John*A」に変換する必要があります。

私はこれを書き始めましたが、スペースとユーザーがコンマを入力しない可能性に固執していると思います。

これが私が持っているものです:

var myString = "John, Doe, A";
var myOtherString = "John  Doe   A";


var myFunction = function (aString) {
        aString = aString.replace(", ", "*");
        aString = aString.replace(", ", "*");

return aString;

};

これらは両方とも戻るはず"Doe*John*A"です。

この機能で繰り返しすぎていると思います。また、カンマが提供されない可能性も考慮していません。

これを行うためのより良い方法はありますか?

4

4 に答える 4

16

はいあります。replace代わりに正規表現で関数を使用してください。それにはいくつかの利点があります。まず、もう 2 回呼び出す必要はありません。第二に、任意の量のスペースとオプションのコンマを説明するのは非常に簡単です:

aString = aString.replace(/[ ]*,[ ]*|[ ]+/g, '*');

スペースを囲む角括弧はオプションですが、スペース文字を読みやすくすることに注意してください。そこにあるあらゆる種類の空白 (タブや改行も) を許可/削除したい場合は、\s代わりに次を使用します。

aString = aString.replace(/\s*,\s*|\s+,/g, '*');

どちらの場合も、コンマを単純にオプションにすることはできないことに注意してください。これは*、文字列内のすべての位置に a が導入されるゼロ幅の一致が可能になるためです。(これを指摘してくれた CruorVult に感謝します)

于 2012-12-19T15:43:46.990 に答える
7

単語以外のすべての文字を置き換えたい場合は、これを試してください。

str.replace(/\W+/g, '*');
于 2012-12-19T15:54:44.240 に答える
3

String.replace は、最初に出現したもののみを置き換えます。それらをすべて置き換えるには、「グローバル」の「g」フラグを追加します。文字グループと + 演算子 (1 つ以上) を使用して、文字のチェーンを一致させることもできます。

aString.replace("[,\s]+", "*", "g");

これにより、コンマと空白のすべてのチェーンが*.

于 2012-12-19T15:43:58.870 に答える
1

これを試して、すべてのスペースとコンマを削除してから、* に置き換えてください。

Myname= myname.replace(/[,\s]/,"*")

パターンから「少なくとも 2 つの項目」を削除するように編集されました。しかし、少なくともアイテムを持っている必要があります。

Myname= myname.replace(/([,\s]{1,})/,"*")

参考:Rublarについて。ただし、m.buettner に従って regexpal を使用したほうがよいでしょう :)

于 2012-12-19T15:49:10.653 に答える