使用JavaScript正则表达式拆分字符串但保留分隔符?

时间:2017-11-28 07:44:06

标签: javascript regex string

我收到的输入如下:

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');

但问题是,我最终得到的数字,我需要与他们的字母。

有没有人知道如何按特定字符拆分字符串但仍保留输出中的字符?

4 个答案:

答案 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);