2016-04-25 157 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

相关问题