gpt4 book ai didi

javascript - 正则表达式中的 $ 与行尾不匹配

转载 作者:数据小太阳 更新时间:2023-10-29 06:15:55 28 4
gpt4 key购买 nike

我对以下正则表达式有疑问:

var s = "http://www.google.com/dir/file\r\nhello"
var re = new RegExp("http://([^/]+).*/([^/\r\n]+)$");
var arr = re.exec(s);
alert(arr[2]);

在上面,我希望 arr[2](即捕获组 2)是"file",与最后一个匹配应用贪心后第一行中的 4 个字符。*,由于/中的回溯模式,然后通过 $ 锚定在行尾。

事实上,arr[] 为空,这意味着模式甚至不匹配。

我可以稍微改变它,使其完全符合我的意图:

var s = "http://www.google.com/dir/file\r\nhello"
var re = new RegExp("http://([^/]+).*/([^/\r\n]+)[\r\n]*");
var arr = re.exec(s);
alert(arr[2]); // "file", as expected

我的问题不是如何从 s 中第一行的末尾获取"file"多少。相反,我试图理解为什么第一个正则表达式失败而第二个成功。为什么 $ 不匹配示例 1 中的\r\n 换行符?不是那它存在的唯一目的是什么?还有什么我想念的吗?

此外,考虑与 sed 中使用的相同的第一个正则表达式(带有使用 -r 启用的扩展正则表达式模式):

$ echo -e "http://www.google.com/dir/file\r\nhello" |sed -r  -e 's#http://([^/]+).*/([^/\r\n]+)$#\2.OUTSIDE.OF.CAPTURE.GROUP#'
<<OUTPUT>>
file.OUTSIDE.OF.CAPTURE.GROUP
hello

在这里,捕获组 2 捕获"file",没有其他任何东西。 “hello”出现在输出中,但不存在于内部捕获组,由输出中字符串“.OUTSIDE.OF.CAPTURE.GROUP”的位置证明。所以正则表达式根据我在 sed 中的理解工作,但不使用内置的 Javascript正则表达式引擎。

如果我将输入字符串中的\r\n 替换为\n,则上述所有三个示例的行为都是相同的,因此据我所知这应该不相关。

最佳答案

您需要启用正则表达式多行模式来匹配行尾字符

var re = new RegExp("http://([^/]+).*/([^/\r\n]+)$", "m");

http://javascript.info/tutorial/ahchors-and-multiline-mode

enter image description here

关于javascript - 正则表达式中的 $ 与行尾不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32959062/

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