2012-01-22 3 views
4

Я хотел бы взять стоимость текстовой рекламы для имен людей, введенных пользователем, и разделить их на элементы в массиве.разделить на символы новой строки AND и запятые и полуколонки

Возьмите теоретически возможный вклад:

people = "Abby Andrews, Ben \r\nCharlie Connors Daphne D., Ernie E. Engels; Faye\r\n\r\nGary Gomez" 

array = people.split('??') 

Как регулярное выражение будет построен, чтобы успешно разделить сумасшедшую церь выше?

Должен быть разделен:

  • \r, \n, \r\n
  • запятой (,) или полу-ободочной кишки (;)
  • несколько пространств

не должны быть разделены:

  • периода (это может быть чье-то начальное)
  • единого пространства (может быть разделение и фамилии)

Я попытался people.split(/\r\n,;/), people.split(/,;\r\n/), и их комбинации, но ни один не произвел результат.

+2

** Что вы пытаетесь до сих пор? ** Существует довольно очевидный ответ ... и это не «пожалуйста, напишите свою программу для меня» веб-сайт ... –

+4

Это может быть довольно очевидный ответ, если вы знаете, как это сделать. Я попробовал 'people.split (/ \ r \ n,; /)', 'people.split (/,; \ r \ n /)' и их комбинации, но ни один не дал результат. – sscirrus

+3

@ Anony-Mousse: Это не так тривиально. Например, если вы посмотрите на мой ответ, порядок чередования является существенным - если бы вы обменивались вокруг трех частей, регулярное выражение было бы неисправным. Поэтому я считаю, что нисходящее движение немного жесткое, особенно сейчас, когда sscirrus прокомментировал, чтобы показать свои усилия. Я поставлю это на вопрос, чтобы он считал новое редактирование, в противном случае опустились бы вниз. –

ответ

11

Попробуйте

array = people.split(
    /\s*[,;]\s* # comma or semicolon, optionally surrounded by whitespace 
    |   # or 
    \s{2,}  # two or more whitespace characters 
    |   # or 
    [\r\n]+  # any number of newline characters 
    /x) 
+0

Спасибо, что объяснили, что компоненты означают Тим, очень полезно!:) – sscirrus

+0

Я бы * не * оставил круглые скобки. И с другой стороны я всегда включал бы лишние пробелы в шаблоне разделителя, то есть '/ \ s * ([,; \ r \ n] + | \ s \ s) \ s * /' –

+0

что такое 'x 'в позиции модификатора? –

Смежные вопросы