我收到的输入如下:
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');
但问题是,我最终得到的数字,我需要与他们的字母。
有没有人知道如何按特定字符拆分字符串但仍保留输出中的字符?
答案 0 :(得分:3)
var str = "F12T213B1239T2F13T341F324";
var regex = /(?=T)|(?=F)|(?=B)/g;
console.log(str.split(regex));
解决方案基于积极前瞻
答案 1 :(得分:1)
执行此操作的一种方法是将所有FTB
替换为后跟该字母的空格:
regex: [FTB]
replacement: $0 // note the leading space
然后,您可以用空格字符拆分它。
答案 2 :(得分:0)
您可以使用非捕获组和一些空值过滤来执行此操作。
正则表达式是:((?:F | T | B)\ d +)
这是一个有效的代码:
console.log(
"F12T213B1239T2F13T341F324"
.split(/((?:F|T|B)\d+)/g)
.filter(d => d != "")
);
答案 3 :(得分:0)
您可以在正则表达式中使用匹配组 .match()
,而不是使用.split()
,它会为您提供所有想要匹配的数组。
the regex 您需要/([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);