所以我得到了一个字符串:
app.config.update(SESSION_COOKIE_NAME='some_new_name')
并且我想提取字符串 AX和BX 之间的所有匹配项以得到如下结果的数组:
let string = "XABXAX12345BX293993AX9393B33AXAXBXBXBXAAABBX";
我尝试使用某种正则表达式,但是我并没有成功。
let result = ["12345", "9393B33AXAX"];
另一个方法是一个简单的for循环,但这也没有按我预期的那样工作。因此,也许有人可以帮助我解决问题。请看一下我的代码:
let result = string.split(/AX([^AXBX]+)BX/);
答案 0 :(得分:2)
这是一个简单的解决方案:
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);
我们构建了START(.*?)END
形式的正则表达式,然后使用它在循环中连续提取匹配项。
答案 1 :(得分:1)
这是一种不使用正则表达式的相对简单的循环方法:
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"));
这不包括任何健全性检查;例如,您可能要检查fromStr
和toStr
不是空字符串。