我总是写这样的正则表达式
<A HREF="([^"]*)" TARGET="_blank">([^<]*)</A>
Run Code Online (Sandbox Code Playgroud)
但我刚刚了解了这个懒惰的东西,我可以这样写
<A HREF="(.*?)" TARGET="_blank">(.*?)</A>
Run Code Online (Sandbox Code Playgroud)
使用第二种方法有什么不利之处吗?正则表达式肯定更紧凑(即使SO更好地解析它).
编辑:这里有两个最佳答案,指出表达式之间的两个重要差异.ysth的答案指向非贪婪/懒惰的弱点,其中超链接本身可能包含A标签的其他属性(绝对不好).Rob Kennedy在贪婪的例子中指出了一个弱点,因为锚文本不能包含其他标签(绝对不行,因为它也不会抓住所有的锚文本)......所以答案是,正则表达式就是他们的是,懒惰和非懒惰的解决方案似乎相同可能在语义上不等同.
编辑:第三个最佳答案是Alan M关于表达式的相对速度.暂时,我会将他标记为最佳答案,以便人们给他更多积分:)
我有一个正则表达式:
(<select([^>]*>))(.*?)(</select\s*>)
Run Code Online (Sandbox Code Playgroud)
由于它使用延迟重复量词,对于更长的字符串(选项超过500),它回溯超过100,000次并失败.请帮我找一个更好的正则表达式,不使用懒惰重复量词
任何人都知道为什么这在javascript中不起作用?(尝试使用Chrome和Firefox):
console.log('"my name is"'.match(/"?(.*?)"?/));
Run Code Online (Sandbox Code Playgroud)
输出:
[""", "", index: 0, input: ""my name is""]
Run Code Online (Sandbox Code Playgroud)
我期待这个:
[""my name is"", "my name is", index: 0, input: ""my name is""]
Run Code Online (Sandbox Code Playgroud)
我对解决问题的替代方法不感兴趣,而且对于我想要实现的目标而言,它不是一个完整的解决方案(我现在做的方式略有不同) - 我只是对匹配失败的原因感兴趣.
我预计不情愿的量词可以匹配所有内容,但不包括最终引用.我不明白为什么表达式无法匹配任何东西?