获取两个字符串之间的组

时间:2019-01-06 20:54:52

标签: javascript arrays regex

所以我得到了一个字符串:

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/);

2 个答案:

答案 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"));

这不包括任何健全性检查;例如,您可能要检查fromStrtoStr不是空字符串。