繁体   English   中英

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

[英]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.

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