gpt4 book ai didi

javascript - Javascript 正则表达式缺乏后视的解决方法

转载 作者:太空宇宙 更新时间:2023-11-04 15:29:04 24 4
gpt4 key购买 nike

我有一个有效的 Python 正则表达式语句:

regex = re.compile(r"(?<=(==))(.*)(?=(==))")    
myList = regex.findall(contents)

对于上下文,输入字符串可能类似于(例如):

== Test User ==
Comment here

== Test User 2 ==
Comment here

我希望提取用户名以及下面一行的相关评论。

我想在我的 Javascript 程序中使用这个正则表达式,但是 Javascript 缺乏后向功能。

有合适的解决方法吗?

最佳答案

标准方法是匹配后向数据和所需数据,并使用捕获组来执行您想要的操作:

  • 如果要检索数据,则将其放入您将在每次比赛后查阅的捕获组中

  • 如果要转换数据,您将希望在捕获组中至少具有“lookbehind”,以便您可以在输出中重现它,如果您需要引用它,也许还需要所需的数据.

示例:

# in these examples, we look for "overflow" preceded by "stack"
"stackoverflow".match(/stack(.*)/)[1] // -> overflow
"stackoverflow".replace(/(stack).*/, "$1underflow") // -> stackunderflow
"stackoverflow".replace(/(stack)(.*)/,"$2ed $1") // -> overflowed stack

我们在 JavaScript 正则表达式实现中遇到的另一个问题是 String.prototype.match 的行为不一致:它通常会返回一个类似于捕获组数组的对象,但是如果您的正则表达式指定 global 标志,它将返回一个(字符串)匹配数组,并且捕获组的详细信息将丢失。

要解决此问题,您可以使用 Pattern.prototype.exec 方法:

var pattern = /==\s*([^=]+)/g;
var input = `== Test User ==
Comment here

== Test User 2 ==
Comment here`;
while (match = pattern.exec(input)) {
console.log(match[1]);
}

关于javascript - Javascript 正则表达式缺乏后视的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44950952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com