[英]How Can I Use Regex To Split A String on Letters and Numbers and Carets followed by digits
[英]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", ""]
您可以使用前瞻分割字符边界,其中S或E是下一个字符:
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.