多条件regex JavaScript拆分

时间:2013-07-29 17:12:58

标签: javascript regex split

我想在以下情况下拆分字符串:

  • 它不是以quatresoixante AND
  • 开头
  • 它不会以dixvingt
  • 结尾

例如:

'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' ]

我知道使用匹配器或发现会很容易,但是只需一次拆分就可以了...

1 个答案:

答案 0 :(得分:1)

你可以这样做:

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

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

我们的想法是添加一个捕获组,其内容将添加到拆分列表中。

捕获组首先包含特定情况,最常见后包含[^-]+ (所有不是-

注意:由于quatre-vingt写的s没有后跟数字,所以我添加了s$