gpt4 book ai didi

javascript - 这是正则表达式BUG吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:32:21 25 4
gpt4 key购买 nike

var url = 'https://mp.weixin.qq.com/s?__biz=MzAxNjczMTQxMA==&mid=504131096&idx=1&sn=c2fe41152807821b7916fa9539a0cf87&scene=1&srcid=0718JR98ETFngTl6mDsNRfhK&key=77421cf58af4a65374324bd2f16d7fdd913230b5ab4bd48a72759cc99919893795265ff20c0c8a79c676e636f789899c&ascene=0&uin=MjAzOTExMTUxMg%3D%3D&devicetype=iMac15%2C1+OSX+OSX+10.11.5+build(15F34)&version=11020201&pass_ticket=kA76WNrCKCEZ3JyEii3tYs88BCmLEM%2FI4LPD%2FtHBzoPjYzI9t7seUadtUUVQ9677';
var reg = /^(http(s)?:\/\/)?(([\w\.]+)\.(?:com|cn|love|net|com\.cn|org)(\/|#|!|%|\w|\d|&|\?|-|=|~|\.|\+)*)$/;
url.match(reg);

我想测试一个字符串是否是一个验证 URL,但是匹配语句会导致进程崩溃! -- 浏览器或者iOS App,之后不会响应,CPU一直在90%+,可能是死循环??是我的 reg 有问题还是这是正则表达式的 BUG?

我在 JavaScript ( http://regexr.com/)、节点和 iOS 中进行了测试,它们返回超时或无响应(崩溃)。

最佳答案

问题是最后一个alternation group有几个分支在字符串中的相同位置匹配(即\w\d),而* 在该组上设置的量词使得回溯很难在匹配失败之前尝试所有可能的组合。

你需要使用一个[\/#!%\w&?\-=~.+]字符类:

/^(http(s)?:\/\/)?(([\w.]+)\.(?:com|cn|love|net|com\.cn|org)[\/#!%\w&?\-=~.+]*)$/

参见 regex demo

请注意,我将 - 保留在字符类中,以免在将来要更新模式时破坏正则表达式(- 可以放在在正则表达式模式的末尾或开头表示文字连字符,但一些开发人员倾向于将符号添加到字符类的末尾,有时在不知情的情况下使用 - 创建一个范围)。

关于javascript - 这是正则表达式BUG吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38694388/

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