简体   繁体   中英

Get groups between two strings

So I got a string:

let string = "XABXAX12345BX293993AX9393B33AXAXBXBXBXAAABBX";

and I'd like to extract all occurrences between the strings AX and BX s to get an array like this as result:

let result = ["12345", "9393B33AXAX"];

I've tried to use some kind of regex but I was not really successfull tbh.

let result = string.split(/AX([^AXBX]+)BX/);

Another aproach was a simple for-loop but also this is not working as I've expected. So maybe somebody is able to help me fixing the issues. Please have a look at my code:

 let string = "XABXAX12345BX293993AX9393B33AXAXBXBXBXAAABBX" let result = []; for (let i=0; i<string.length; i++) { if (string[i] == "A" && string[i+1] === "X") { for (let j=i; j<string.length; j++) { if (string[j] == "B" && string[j+1] === "X") { let substring = string.substring(i+1, j+1); result.push(substring) break; } } } } console.log(result); 

Here's a simple solution:

 function re_esc(str) { return str.replace(/\\W/g, "\\\\$&"); } const start = "AX"; const end = "BX"; const re = new RegExp(re_esc(start) + '([\\\\s\\\\S]*?)' + re_esc(end), 'g'); const string = "XABXAX12345BX293993AX9393B33AXAXBXBXBXAAABBX"; const results = []; let m; while (m = re.exec(string)) { results.push(m[1]); } console.log(results); 

We build a regex of the form START(.*?)END , then use it to successively extract matches in a loop.

Here's a relatively straightforward looping approach that doesn't use regexes:

 function findOccurrences(str, fromStr, toStr) { const occurrences = []; let startIndex = 0; while (true) { const fromIndex = str.indexOf(fromStr, startIndex); if (fromIndex === -1) { break; } const toIndex = str.indexOf(toStr, fromIndex + fromStr.length); if (toIndex === -1) { break; } const occurrence = str.slice(fromIndex + fromStr.length, toIndex); occurrences.push(occurrence); startIndex = toIndex + toStr.length; } return occurrences; } console.log( findOccurrences("XABXAX12345BX293993AX9393B33AXAXBXBXBXAAABBX", "AX", "BX")); 

This doesn't include any sanity checks; for instance, you might want to check that fromStr and toStr aren't empty strings.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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