繁体   English   中英

如何在正则表达式中将单个S或E字符串中的字符串拆分后跟JavaScript中的数字?

[英]How do I split a string in regex by a single S or E char followed by digits in JavaScript?

我有一个像下面这样的字符串。

ids = 'S1486S1485E444'

我想将它分成由S或E分隔的部分数组,如下所示。

["S1486", "S1485", "E444"]

这是我提出的,但它也提供了未定义和空字符串。

ids.split(/(S+\d+)|(E+\d+)/)

["", "S1486", undefined, "", "S1485", undefined, "", undefined, "E444", ""]

您可以使用前瞻分割字符边界,其中SE是下一个字符:

var ids = 'S1486S1485E444';

var result = ids.split(/(?=S|E)/); // S1486,S1485,E444

这样做的原因是,虽然.split通常会删除它匹配的字符,但这与字符本身不匹配,而是下一个字符是您想要的字符。

或者只是做一个匹配:

'S1486S1485E444'.match(/([SE]+\d*)/g)

.split()的参数是您想要分割字符串的分隔符。 如果该正则表达式包含匹配的组(用括号表示),那么它们也包含在结果中。

一种方法类似于你拥有的,但然后过滤掉所有空字符串。

ids.split(/([SE]\d+)/).filter(Boolean);

// result: ["S1486", "S1485", "E444"]

如果您的目标浏览器在Array原型上没有.filter ,那么您必须自己实现,抱歉。 或者,只需从结果中获取每秒值:

ids.split(/([SE]\d+)/)

// result: ["", "S1486", "", "S1485", "", "E444", ""]

从那里,一个简单的for循环可以获得你所追求的部分。

如果使用.match()方法 ,它将返回包含所有匹配项的数组:

ids.match(/(S\d+|E\d+)/g)
// OR
ids.match(/([SE]\d+)/g)

请注意,我已经调整了一点正则表达式,你需要.match()g标志来返回一个数组。 如果没有匹配则返回null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM