gpt4 book ai didi

javascript - 为什么 JavaScript 正则表达式在我没有告诉它时捕获空格?

转载 作者:行者123 更新时间:2023-11-30 07:38:08 24 4
gpt4 key购买 nike

使用以下代码:

var firefox = "Mozilla/5.0 (Android; Mobile; rv:32.0) Gecko/32.0 Firefox/32.0";
var chrome = "Mozilla/5.0 (Linux; Android 4.4.4; Nexus 4 Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.57 Mobile Safari/537.36";

var newf = firefox.replace(/.*?(Firefox|Chrome)\/([\d\.]*?)/, "$1 $2");
var newc = chrome.replace(/.*?(Firefox|Chrome)\/([\d\.]*?)/, "$1 $2");
console.log(newf);
console.log(newc);

我在控制台中得到这个:

Firefox 32.0
Chrome 38.0.2125.57 Mobile Safari/537.36

我只想获取browser_name 版本。我做错了什么?

最佳答案

您的正则表达式没有考虑最后一个 Mobile Safari/537.36;作为vks pointed out正则表达式忽略最后一位,因为您的模式在 Chrome/38.0.2125.57 匹配后完全成功。

如果您将结束字符 ($) 添加到您的模式中,它就会失败并且问题会很明显。 replace()在 Javascript 中查找与正则表达式匹配的文本部分并替换它,而不是整个输入字符串。


您可以在末尾添加 .*“燃烧”最后的字符,从而使正则表达式匹配整行 从而导致替换以删除这些位。这还要求您通过删除 [\d\.]* 之后的 ? 使之前的匹配组成为非惰性匹配组。

我还会在模式的开头/结尾添加 ^$ 以表示输入字符串的开头和结尾(这是一种很好的形式) ),以及可选地添加 /gm,它告诉正则表达式匹配每一行(可能对您的情况有用),尽管这些添加都不是必需的。

/^.*?(Firefox|Chrome)\/([\d\.]*).*$/gm

关于javascript - 为什么 JavaScript 正则表达式在我没有告诉它时捕获空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25922292/

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