2017-01-22 3 views
0

次のコードは、区切り文字がしかし、私は分割さときにそれぞれの区切り文字を維持したいseparators文字列を分割した後に複数の区切り文字を保持しますか?

var separators = ['\\\.', '\\\(', '\\\)', ':', '\\\?', '\\\!', '\\\"', '\\\n']; 
    var tokens = someString.split(new RegExp(separators.join('|'))); 

    tokens = tokens.filter(Boolean); 

で指定された状態で、アレイにsomeStringを分割します。私はいくつかの解決法を見つけましたが、それらのほとんどは1つの区切り文字しか対象にしていません。これは扱いがかなり簡単です。私の例のように複数のデリミタを扱うにはどうすればよいでしょうか?

+1

入力文字列と出力配列の例を挙げてください。 – Giladd

答えて

1

これはどうですか?

var someString = 'This.Is:A?:Test!With"Delimiters' 
var result = someString.split(new RegExp("([" + separators.join("") + "])+")); 

今、あなたは1つの配列の要素と区切り文字の両方を持っている:

console.log(result) 
> ["This", ".", "Is", ":", "A", ":", "Test", "!", "With", """, "Delimiters"] 

分割は次のように行うことができる:

var elements = []; 
var delimeters = []; 
for(var i = 0; i < result.length; i=i+2){ 
    elements.push(result[i]); 
} 
for(var i = 1; i < result.length; i=i+2){ 
    delimeters.push(result[i]); 
} 

だから、あなたが得る:

console.log(elements) 
> ["This", "Is", "A", "Test", "With", "Delimeters"] 
console.log(delimeters) 
> [".", ":", ":", "!", """] 

それが助けて欲しい!

関連する問題