使用带有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);