[英]Splitting a string using a JavaScript regex but keeping the delimiter?
我收到如下输入:
F12T213B1239T2F13T341F324
我必须按字母将其分组,再加上其后的数字。 因此理想的输出为:
F12,T213,B1239,T2,F13,T341,F324
然后根据所用字母对数字进行一些处理。 字母是固定的,它们始终是B,F,T
到目前为止,我尝试通过以下方式按字母进行拆分:
var separators = ['T', 'B', 'F'];
var parts = input.split(new RegExp('('+separators.join('|')+')'),'g');
但是,这样做的问题是我只得到数字,我需要带字母。
有谁知道如何用某些字符分割字符串,但仍将字符保留在输出中?
var str = "F12T213B1239T2F13T341F324"; var regex = /(?=T)|(?=F)|(?=B)/g; console.log(str.split(regex));
解决方案基于正向超前
一种方法是用一个空格后跟该字母替换所有FTB
:
regex: [FTB]
replacement: $0 // note the leading space
然后,您可以使用空格字符将其分割。
您可以使用非捕获组和一些空值过滤来实现。
正则表达式为: ((( ?: F | T | B)\\ d +)
这是一个工作代码:
console.log( "F12T213B1239T2F13T341F324" .split(/((?:F|T|B)\\d+)/g) .filter(d => d != "") );
除了使用.split()
还可以将.match()
与正则表达式中的匹配组一起使用,它将为您提供所有所需匹配项的数组。
这是您需要的正则表达式 /([TBF]\\d{1,4})/g
。
这应该是您的代码:
var input = "F12T213B1239T2F13T341F324";
var separators = ['T', 'B', 'F'];
var parts = input.match(new RegExp('(['+separators.join('')+']\\d{1,4})','g'));
console.log(parts);
注意:
['+separators.join('')+']
将在正则表达式中为您提供以下[TBF]
,因此它与分隔符之一匹配。 \\d{1,4}
将匹配该分隔符后面的数字。 演示:
var input = "F12T213B1239T2F13T341F324"; var separators = ['T', 'B', 'F']; var parts = input.match(new RegExp('(['+separators.join('')+']\\\\d{1,4})','g')); console.log(parts);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.