gpt4 book ai didi

javascript - 我应该使用 | (管道)或? (问号)?

转载 作者:行者123 更新时间:2023-11-30 18:17:35 24 4
gpt4 key购买 nike

我有分组括号 ()(?: ),即使括号内的表达式不匹配,我也需要匹配。我已经看到 |? 用于此(即 (a|b|c|)(a|b |c)?),但应该使用哪个/效率更高,为什么?

由于不同的 JavaScript 引擎对正则表达式的解释不同,我专门使用 SpiderMonkey 引擎。然而,一个通用的(语言方面和引擎方面的)答案会很好。

编辑:一个具体的例子是 DuckDuckGo Frequency goodie .在这种情况下,为什么作者选择 | 而不是 ?

最佳答案

要检查性能,请参阅 this fiddle .


? 与分组一起使用或将 | 与空字符串一起用作选项可能会导致意外结果!

耦合测试:

var myString = "this is a test string"; 
var myRegexp = /(test)?/;
var match = myRegexp.exec(myString);
alert(match[0]); // returns empty string

var myString = "this is a string";
var myRegexp = /(test)?/;
var match = myRegexp.exec(myString);
alert(match[0]); // returns empty string

var myString = "this is a test string";
var myRegexp = /(test|)/;
var match = myRegexp.exec(myString);
alert(match[0]); // returns empty string

var myString = "this is a string";
var myRegexp = /(test|)/;
var match = myRegexp.exec(myString);
alert(match[0]); // returns empty string

var myString = "this is a test string";
var myRegexp = /(test)/;
var match = myRegexp.exec(myString);
alert(match[0]); // returns "test"

这个以错误结束:

var myString = "this is a string"; 
var myRegexp = /(test)/;
var match = myRegexp.exec(myString);
alert(match[0]); // error

这个可能是适合您的解决方案:

var myString = "this is a test string"; 
var myRegexp = /^(?:.*(test)|(?!.*test))/;
var match = myRegexp.exec(myString);
alert(match[1]); // returns "test"

var myString = "this is a string";
var myRegexp = /^(?:.*(test)|(?!.*test))/;
var match = myRegexp.exec(myString);
alert(match[1]); // returns undefined

this fiddle测试上面的代码.

关于javascript - 我应该使用 | (管道)或? (问号)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12887383/

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