2012-03-19 2 views
0

Можно создать дубликат:
JavaScript RegExp Three PartsРазделить строку в JavaScript с тремя частями

мне нужна помощь с регулярными выражениями в JavaScript (К сожалению, я до сих пор пытаюсь узнать его.).

У меня есть эти строки:

all (any) -del 
all -del (any) 
all (any) 
all -del 
all 

PS: all, any и del может принимать любое значение, включая пробелы.

И мне нужно, чтобы отделить каждую строку:

var1 = all 
var2 = any (or null) 
var3 = del (or null) 

Можете ли вы помочь мне с этим? Благодаря!

+1

Есть ли что-нибудь отношение о словах, будучи заключенный в круглые скобки '()' или с префиксом '-'? – Anurag

+0

Да, они могут принимать любое значение, включая пробелы. –

+0

Я уже отвечал на этот раз сегодня ... – epascarello

ответ

0

Как насчет:

/^(.*?)\s?(\(.*?\)|)\s?(-.*?|)$/ 

приложение на примерах:

'all (any) -del'.match(/^(.*?)\s?(\(.*?\)|)\s?(-.*?|)$/) 
["all (any) -del", "all", "(any)", "-del"] 

'all (any)'.match(/^(.*?)\s?(\(.*?\)|)\s?(-.*?|)$/) 
["all (any)", "all", "(any)", ""] 

'all -del'.match(/^(.*?)\s?(\(.*?\)|)\s?(-.*?|)$/) 
["all -del", "all", "", "-del"] 

'all'.match(/^(.*?)\s?(\(.*?\)|)\s?(-.*?|)$/) 
["all", "all", "", ""] 

Чтобы обработать новое требование, немного сложным:

'all (any) -del'.match(/^(.*?)(?:\s?(\([^-]*\)|)\s?(-[^()]*|)|\s?(-[^()]*|)\s?(\([^-]*\)|))$/) 
["all (any) -del", "all", "(any)", "-del", undefined, undefined] 
'all -del (any)'.match(/^(.*?)(?:\s?(\([^-]*\)|)\s?(-[^()]*|)|\s?(-[^()]*|)\s?(\([^-]*\)|))$/) 
["all -del (any)", "all", undefined, undefined, "-del ", "(any)"] 
+0

Спасибо, человек! Можно ли адаптировать это выражение для работы со строкой: 'all -del (any)'? –

+0

@CaioTarifa: Это немного сложнее, см. Мое редактирование. – Toto

+0

Чрезвычайно сложный! Тем не менее, вы пришли довольно близко, спасибо. –