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

आप सभी पिछले मामलों से मिलान करने के लिए एक एकल regex का उपयोग करना चाहते हैं विभाजित? – Ismail

+0

रेगेक्स का उपयोग करके 'कीवर्ड' और 'कुंजी' के सभी उदाहरणों को हटाने और हटाने के बारे में क्या? –

+0

आपके पास रेगेक्स के साथ क्या गलत है? ध्यान दें कि यह टूल एक परीक्षण STRING एकवचन का उपयोग कर रहा है, और इसलिए यह मान रहा है कि इनपुट में सबकुछ एक लंबी स्ट्रिंग है, जब आप उनके लिए कई अलग-अलग तार होने का इरादा रखते हैं। – Hamms

उत्तर

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

सभी मामलों आप दे दी है के लिए काम करेगा।
Demo here

+0

ठीक है, +1 !! –

+0

यह आश्चर्यजनक है। धन्यवाद जेम्स! दुर्भाग्यवश 'स्ट्रिंग स्ट्रिंग' मामले में अल्फा-न्यूमेरिक और प्रतीकों को केवल शब्द वर्णों को शामिल करने की आवश्यकता नहीं है। मैं इसे कैसे जोड़ सकता हूं? :) '(\ skeyword \ s | \ skey \ s | \ s (? =। * [\ [{] | [a-z0-9 -] + $))'? – ThomasReggi

+0

@ थॉमसरेगी मेरा अद्यतन उत्तर देखें, चाल चलाना चाहिए। –

3

आप रिक्त स्ट्रिंग "" साथ "keyword" और "key" की जगह ले सकता है, तो \s+

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

@ थॉमस रीगी आप वैकल्पिक रूप से 'कीवर्ड | कुंजी' को अल्पविराम चरित्र के साथ प्रतिस्थापित कर सकते हैं, 'फिर' .split (/, /) ' – guest271314

संबंधित मुद्दे