2012-12-19 19 views
9

"Doe、John、A"(姓、名、ミドルイニシャル)のような文字列があります。Regexはすべてのカンマを値に置き換えます

文字列を "Doe * John * A"に変換する正規表現を作成しようとしています。

しかし、 "Doe、John、A"は "Doe * John * A"に変換されるので、この文字列のすべてのスペースを考慮する必要があります。

また、 "Doe John A"という文字列は "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"を返す必要があります。

私はこの機能で自分自身を繰り返しすぎていると思います。また、カンマが付かない可能性も考慮していません。

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

答えて

14

はい、あります。正規表現でreplace関数を代わりに使用してください。それにはいくつかの利点があります。まず、もう2回呼び出す必要はありません。第二に、それは空間の任意の量やオプションのカンマを占めていることは本当に簡単です。

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

注スペースの周りの角括弧はオプションですが、私は、彼らがより読みやすいスペース文字を作る見つけること。許可したい場合は/(あまりにも、タブや改行)が空白のいずれかの種類を削除し、代わりに\sを使用します。それは、ゼロを可能にするため、両方のケースでは、我々は単に、カンマをオプションにすることができないことを

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

注意を-widthマッチは、文字列内のすべての位置に*を導入します。 (これを指摘するCruorVultに感謝します)

+0

' "ドウ、ジョン、" .replace(/ \ sの*、\ 'は*/gのよ? * @)* // "* D * o * e ** J * o * h * n ** A *" ' – CruorVult

+0

@CruorVultが歓声をあげる –

+0

*を*に置き換えるとどうなりますか?私はちょうどこれを 'aString = aString.replace(/ [] *、[] * | [] +/g、 ' - ')に変更しますか? ? ' - 有益な答え、btwのために感謝します。 – Jeff

2

String.replaceは、最初の発生を置き換えます。これらをすべて置き換えるには、 "global"に "g"フラグを追加します。また、文字のチェーンと一致する文字グループと+演算子(1以上)を使用することができます。

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

これは*とカンマと空白のすべてのチェーンを交換します。

+2

再度、これは正規表現がどのように記述されているかではなく、どのように修飾子が適用されるかjavadript –

1

空白とカンマをすべて削除してから*に変更してください。

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

Edittedパターンから '少なくとも2つの項目が' 削除など。しかし、少なくともアイテムを持っていること。

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

Reference: on Rublar。しかし、あなたはmごとに正規表現を使う方が良いです。buettner :)

+0

@ m.buettnerループホールを出してくれてありがとう: – bonCodigo

+0

"少なくとも1つのアイテム"にしてください。今では空白とコンマがある前と同じくらい多くの '*'を取得します –

+0

@ m.buettnerここで私は[rublar]を疲れたところです(http://rubular.com/r/6btBOKRqHy) – bonCodigo

5

あなたはすべての非単語の文字を置換したい場合は、この方法を試してください。

str.replace(/\W+/g, '*'); 
関連する問題