正则表达式 : Same character part of two matches

标签 javascript regex

<分区>

如何让同一个 Angular 色成为两个不同比赛的一部分?

例如我希望 "abc".match(/ab|bc/g) 产生两个匹配项——一个匹配“ab”,在这种情况下会匹配,另一个匹配'公元前'。换句话说,“b”字符是我要查找的两个子字符串的一部分。

最佳答案

您不能从字面上通过单个匹配 调用来做到这一点。一旦 Angular 色被消耗,它就被消耗掉。然而,Wiktor 指向一个副本(我应该意识到)an answer它通过重复 exec 调用做了一件非常聪明的事情。

根据实际情况,另一种选择是尽可能接近,以便您可以通过后处理修复它,使用积极的先行断言。我们可以说“如果 a 紧跟 b,则只匹配它——但不要使用 b”。然后,如果我们有 a 结果,我们知道它们确实是 ab 结果(否则不会匹配),我们可以相应地更改它们:

var result = "abc".match(/a(?=b)|bc/g);
if (result) {
    result = result.map(function(entry) {
        return entry === "a" ? "ab" : entry;
    });
}

或者使用 ES2015+:

let result = "abc".match(/a(?=b)|bc/g);
if (result) {
    result = result.map(e => e === "a" ? "ab" : e);
}

如果 a 部分不同,您可以使用其他检查(例如 entry.length === 1!entry.endsWith ("b")等) 以真实数据为准。

实例(假设 a 的 ES5 和更早版本):

var result = "abc".match(/a(?=b)|bc/g);
if (result) {
    result = result.map(function(entry) {
        return entry === "a" ? "ab" : entry;
    });
}
console.log(result);

关于正则表达式 : Same character part of two matches,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45018745/

相关文章:

JavaScript 正则表达式用第一个字母替换单词,除非在括号内

php - 在 PHP preg_replace 函数中包含新行

python - 如何在 python 中拆分运算符和操作数

php - 将 Javascript 正则表达式转换为 PHP (PCRE) 表达式

javascript - 如何将 "to"字段(在电子邮件 header 中)设置为群组电子邮件地址?

javascript - 我怎样才能在一页上有多个标签框

javascript - 如何将事件处理程序分配给 proto.io 开/关开关?

java - 什么是 Java 中的扫描器跳过以及为什么要使用它?

javascript - 访问 Angular 2 中的 DOM 元素并更改元素的类属性

javascript - "Uncaught TypeError: Cannot read property ' 名称 ' of undefined"在递增数字时单击按钮