簡體   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