次のようなコードがあります:
var r = /(?:^\s*([^\s]*)\s*)(?:,\s*([^\s]*)\s*){0,}$/
var s = " a , b , c "
var m = s.match(r)
m => [" a , b , c ", "a", "c"]
文字列全体が一致したように見えますが、どこに"b"
行ったのでしょうか? むしろ次のような結果になることを期待します:
[" a , b , c ", "a", "b", "c"]
m.shift()
次のような結果になりますs.split(',')
が、空白も削除されます。
正規表現に間違いがあるのでしょうか、それとも誤解しているのでしょうかString.prototype.match
?
ベストアンサー1
複雑な正規表現を必要とせずにこれを行う非常にシンプルで簡単な方法を次に示します。
var str = " a , b , c "
var arr = str.split(",").map(function(item) {
return item.trim();
});
//arr = ["a", "b", "c"]
ネイティブは.map
IE9 以降でサポートされています:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
ES6+ ではさらに短くなります:
let arr = str.split(",").map(item => item.trim());
完成のために、Typescriptで入力情報を表示します。
let arr: string[] = str.split(",").map((item: string) => item.trim());