2013-07-29 4 views
0

Я хотел бы разделить строку, если:Несколько условий регулярное выражение JavaScript разделить

  • Она не начинается с quatre или soixante И
  • Это не заканчивается dix или vingt

Например:

'deux-cent-quatre-vingt-trois'.split(/**/); 
> ['deux', 'cent', 'quatre-vingt', 'trois' ] 

У меня было несколько попыток и неудач, например:

'deux-cent-quatre-vingt-dix-trois' 
      .split(/^(?![quatre|soixante]-[dix|vingt])(\w*)-(\w*)/); 
> [ '', 'deux', 'cent', '-quatre-vingt-trois' ] 

или:

'deux-cent-quatre-vingt-dix-trois'.split(/(?!quatre|soixante)-(?!vingt|dix)/); 
> [ 'deux' 'cent', 'quatre-vingt', 'trois' ] 

, который работает, но это не делает:

'cent-vingt'.split(/(?!quatre|soixante)-(?!vingt|dix)/); 
> [ 'cent-vingt' ] 

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

+0

Я предполагаю, что вы хотите && между вашими точками. –

+0

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

+0

Хм ... Кажется, что javascript не поддерживает lookbehinds .. Вы пытаетесь отделить все французские цифры от нуля до quatre-vingt-dix-neuf + cent? –

ответ

1

Вы можете сделать это вот так:

var text = "deux-cent-quatre-vingt-trois"; 

console.log(text.split(/(?:^|-)(quatre-vingt(?:-dix|s$)?|soixante-dix|[^-]+)/)); 

Идея состоит в том, чтобы добавить группу захвата, содержимое которой добавлено в список расщепления.

группа захвата содержит по крайней первым частным случаям и после того, как наиболее общие, описана со [^-]+ (все, что не является -)

Примечания: так как quatre-vingt написано с s когда оно не сопровождается число, я добавил s$ как возможность.

+0

Спасибо, он отлично работает. :) – nmussy

+0

Предположим, вам нужно избежать того, чтобы _'-'_, за которым следует _'quatre'_, один из удаляемых в этом предложении, для чего это регулярное выражение? Если возможно, пожалуйста, дайте мне знать, я пытаюсь понять ответ. – rps

+0

Либо вы захватываете quatre-vingt (или quatre-vingts, или quatre-vingt-dix), либо вы захватываете soixante-dix, или вы захватываете все, что найдете до дефиса. Этот последний случай - это то, что разделяет элементы, захватывая все, кроме конечного дефиса. – nmussy

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