2016-04-25 255 views
8

我在努力將以下字符串分成兩部分。主要是因爲可能的分隔符之一是空格字符,它可能出現在第二個捕獲組中。第一次出現分割字符串

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

我怎麼能在任\s\skeyword\s,或\skey\s拆分這些字符串?

'[] []' // => ['[]', '[]'] 
'[] 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

你想用一個正則表達式來以前所有的情況下匹配嗎? – Ismail

+0

如何退後一步,然後使用正則表達式去除'keyword'和'key'的所有實例? –

+0

你有什麼錯誤的正則表達式?請注意,此工具正在使用STRING單數測試,因此假設輸入中的所有內容都是一個長字符串,而您希望它們是多個單獨的字符串。 – Hamms

回答

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

將工作的所有你給的情況下。
Demo here

+0

幹得好,+1! –

+0

這太神奇了。謝謝詹姆斯!不幸的是'string string'的情況下需要包含字母數字和符號,而不僅僅是單詞字符。我該如何添加? :)'(\ skeyword \ s | \ skey \ s | \ s(?=。* [[[[] | [a-z0-9 - ] + $))'? – ThomasReggi

+0

@ThomasReggi看到我更新的答案,應該做的伎倆。 –

3

你可以用空字符串替換"""keyword""key",然後分裂\s+

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

@ThomasReggi你也可以用逗號代替'keyword | key',''然後調用'.split(/,/)' – guest271314

相關問題