2012-02-19 12 views
1

に複数のルールで文字列を分割する2つのルールを意味はどのように私は例えば、この文字列を持っているのJavaScript

strArr = ['my','name','is','john','&#doe','oh','&yeh']; 

適用されます。

  1. 各スペースの後に分割 ""(私は方法を知っている)
  2. 特殊文字( "。"または "#")がある場合は、特殊文字を含む単語の前に文字を "&"で分割して追加します。

最初のルールではstrArr = str.split( "")を使用できます。私は他のトリックをどうやってやるの?

おかげで、

アロン
+2

それは ' '&#doe''または'' も&doe''べきでしょうか?あなたは ''&yeh''ではなく ''&.yeh''を持っています。 –

+0

これらの「特殊文字」を入力の一部として使用することは期待されていますか? –

+0

[異なる記号を含む文字列を分割するにはどうすればよいですか?](http://stackoverflow.com/questions/1880332/how-do-i-split-a-string-that-c​​ontains-different-signs) – outis

答えて

6

を見つけたとき'&doe'なく'&#doe'する必要があり、簡単な解決策はちょうどスペースで&分割して、すべての.#を置き換えることであろう結果を想定すると、あなたの再配列とstr.replace("#", "&#")str.replace(".","&.")を反復処理:

strArr = str.replace(/[.#]/g, ' &').split(/\s+/) 

/\s+/は、1つではなく連続した空白に一致します。

結果は'&#doe''&.yeah'同じ正規表現を使用してキャプチャを追加する必要があります場合は、次の

strArr = str.replace(/([.#])/g, ' &$1').split(/\s+/) 
0

使用分割()メソッド。それはあなたが必要なものです: http://www.w3schools.com/jsref/jsref_split.asp

1)まず空白に分割してください。
2)あなたの配列を繰り返し、#またはを見つけたら配列メンバーで再び分割してください。
3)あなたは

1

は、一度にすべての特殊文字を一致させるために、正規表現を使用する必要があります。 「スペシャル」とは、あなたが「手紙なし」を意味すると仮定します。

var pattern = /([^ a-z]?)[a-z]+/gi;    // Pattern 
var str = "my name is john#doe oh.yeh";   // Input string 
var strArr = [], match;       // output array, temporary var 
while ((match = pattern.exec(str)) !== null) { // <-- For each match 
    strArr.push((match[1]?'&':'') + match[0]); // <-- Add to array 
} 
// strArr is now: 
// strArr = ['my', 'name', 'is', 'john', '&#doe', 'oh', '&.yeh'] 

連続する特殊文字と一致しません。そのためにパターンを修正する必要があります。たとえば、すべての連続する文字を含める場合は、([^ a-z]+?)を使用します。

また、最後の特殊文字は含まれません。これも含めたい場合は[a-z]*を使用し、!== nullを削除してください。

0

私は(分割の組み合わせを考える)と(代わる)は、あなたが探しているものです。

str = "my name is john#doe oh.yeh"; 

strArr = str.replace('\W',' &'); 

strArr = strArr.split(' '); 

あなたが尋ねたものに近いすべきであると。

関連する問題