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