Javascript-使用Regex进行.split,如果下一个字符不是,则返回所有匹配项



使用带有Regex的.split(),使用带有多个字符的空白进行拆分的正确方法是什么?

例如,使用类似以下字符串:

const str = 'Supreme > 22 < 27 < 34> 185';

预期的结果是:

const output = ['Supreme', '> 22', '< 27', '< 34', '> 185'];

我曾尝试将.split()与模式/.+?(?=>|<)/一起使用,但它返回的结果相反,如:

const opposite = [ '', '', '', '', '> 185' ]

您可以使用

/s*(?=[><])/

请参阅regex演示。它匹配:

  • s*-零个或多个空白字符
  • (?=[><])-紧接着是<>

由于模式可以匹配空字符串,因此在生成的数组中会有空项,需要删除,例如.filter(Boolean)

请参阅JavaScript演示:

const str = 'Supreme > 22 < 27 < 34> 185';
console.log(str.split(/s*(?=[><])/).filter(Boolean));

可以使用实现匹配方法

console.log('Supreme > 22 < 27 < 34> 185'
   .match(/(?:^|[<>])[sS]*?[^s<>](?=s*[<>]|$)/g))

请参阅regex演示。详细信息:

  • (?:^|[<>])-字符串或<>的开头
  • [sS]*?-任何零个或多个字符,尽可能少
  • [^s<>]-除空白字符外的任何字符,><
  • (?=s*[<>]|$)-紧跟任何0+个空白字符,然后是<>或字符串末尾

您可以使用match方法。它将返回您的预期输出。

const str = 'Supreme > 22 < 27 < 34> 185';
const ret = str.match(/(w+)|(<s*d+)|(>s*d+)/g);
console.log(ret);

最新更新