<分区>
如何让同一个 Angular 色成为两个不同比赛的一部分?
例如我希望 "abc".match(/ab|bc/g)
产生两个匹配项——一个匹配“ab”,在这种情况下会匹配,另一个匹配'公元前'。换句话说,“b”字符是我要查找的两个子字符串的一部分。
标签 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 - 如何将事件处理程序分配给 proto.io 开/关开关?
java - 什么是 Java 中的扫描器跳过以及为什么要使用它?
javascript - 访问 Angular 2 中的 DOM 元素并更改元素的类属性
javascript - "Uncaught TypeError: Cannot read property ' 名称 ' of undefined"在递增数字时单击按钮