2016-04-25 8 views
8

次の文字列を2つに分割するのに苦労しています。主に、可能な区切り文字の1つがスペース文字であるため、2番目のキャプチャグループに表示される可能性があります。私は\s\skeyword\s、または\skey\sのいずれかでこれらの文字列を分割することができますどのように最初の出現時の分割文字列

https://regex101.com/r/dS0bD8/1

'[] []' // => ['[]', '[]'] 
'[] keyword []' // => ['[]', '[]'] 
'[] key []' // => ['[]', '[]'] 

'[] ["can contain spaces"]' // => ['[]', '["can contain spaces"]'] 
'[] keyword ["can contain spaces"]' // => ['[]', '["can contain spaces"]'] 
'[] key ["can contain spaces"]' // => ['[]', '["can contain spaces"]'] 

'{} {}' // => ['{}', '{}'] 
'{} keyword {}' // => ['{}', '{}'] 
'{} key {}' // => ['{}', '{}'] 

'{} {"can":"contain spaces"}' // => ['{}', '{"can":"contain spaces"}'] 
'{} keyword {"can":"contain spaces"}' // => ['{}', '{"can":"contain spaces"}'] 
'{} key {"can":"contain spaces"}' // => ['{}', '{"can":"contain spaces"}'] 

'string string' // => ["string", "string"] 
'string keyword string' // => ["string", "string"] 
'string key string' // => ["string", "string"] 
+1

を分割し、空の文字列"""keyword""key"を置き換えることができますか? – Ismail

+0

一歩を踏み出し、 'keyword'と' key'のすべてのインスタンスを削除してからRegexを使用するのはどうですか? –

+0

あなたは正規表現に何が問題なのですか?このツールはSTRINGという単数形のテストを使用しているため、複数の個々の文字列であることを意図しているときは、入力のすべてが1つの長い文字列であることを前提としています。 – Hamms

答えて

8
(\skeyword\s|\skey\s|\s(?=.*[\[{]|[^\]}]+$)) 

あなたが与えたすべてのケースのために働くだろう。
Demo here

+0

さて、+1! –

+0

これは素晴らしいです。ジェームズありがとう!残念なことに、 'string string'の場合には英数字と記号だけを含む必要があります。これをどのように追加できますか? ( '\ [{] | [a-z0-9 - ] + $))'(\ skeyword \ s | \ skey \ s | \ s – ThomasReggi

+0

@ThomasReggi私の更新された答えを見て、そのトリックを行う必要があります。 –

3

あなたは、あなたが以前のすべてのケースを一致させるために、単一の正規表現を使用したい\s+

str.replace(/keyword|key/g, "").split(/\s+/) 
+0

@ThomasReggi代わりに、 'キーワード|キー'をカンマ文字 '、'で置き換えて、 '.split(/、/)' – guest271314

関連する問題