+ 演算子は貪欲です。/(x\w)+/
文字列全体と一致する必要が'xaxbxc'
あり、キャプチャ グループには、(x\w)
コンポーネントと一致する最終的な値が含まれます。この場合'xc'
。連続する各一致をキャプチャする場合は、/(x\w)+/
代わりに/((?:x\w)+)/
. これにより、キャプチャ グループがシーケンス内ではなく、シーケンス内で移動します。は(?: )
非キャプチャ グループを表します。
編集:
連続するインスタンスだけでなく、のすべてのインスタンスが必要な場合は(x\w)
、 + 演算子またはキャプチャ グループを使用しないでください。グローバル正規表現を使用するだけです: /x\w/g
.
'QQxaxbQQxcQQ'.match(/x\w/g)
利回り['xa, 'xb', 'xc']
。
'QQxaxbQQxcQQ'.match(/((?:x\w)+)/)
利回り['xaxb', 'xaxb']
。
編集2:
QQ
s の間だけを検索する場合は、asplit
が最速の方法です。(ここではアンダースコアが大いに役立ちます。)
_.chain('xyQQxaxbQQxcQQxr'.split('QQ'))
.slice(1, -1)
.map(function (string) {
return string.match(/x\w/g);
})
.flatten()
.compact()
.value()
得られる ['xa', 'xb', 'xc']