0

如果出现以下情况,我想拆分一个字符串:

  • 它不以 aquatresoixanteAND开头
  • 它不以 adix或 a结尾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' ]

我知道使用 matcher 或 find 会很容易,但是一次拆分会很棒...

4

1 回答 1

1

你可以这样做:

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

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

这个想法是添加一个捕获组,其内容被添加到拆分列表中。

捕获组首先包含特定情况,然后是最一般的情况,用[^-]+ (all that is not a -)描述

注意:因为quatre-vingts后面没有数字,所以我添加s$了一个可能性。

于 2013-07-29T17:54:57.043 回答