简体   繁体   English

获取两个字符串之间的组

[英]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: 我想提取字符串AX和BX之间的所有出现 ,以获得这样的数组作为结果:

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. 另一个方法是一个简单的for循环,但这也没有像我预期的那样工作。 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. 我们构建一个START(.*?)END形式的正则表达式,然后使用它在循环中连续提取匹配。

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. 例如,您可能想要检查fromStrtoStr不是空字符串。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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