Javascript Ecmascript正则表达式替换运算符(管道|)是否确保计算顺序?
我使用的是Javascript(版本5,如果有必要的话),我必须在不允许使用斜杠的上下文中存储字符串。在存储时,我漫不经心地写道:Javascript Ecmascript正则表达式替换运算符(管道|)是否确保计算顺序?,javascript,regex,Javascript,Regex,我使用的是Javascript(版本5,如果有必要的话),我必须在不允许使用斜杠的上下文中存储字符串。在存储时,我漫不经心地写道: mystring.replace(/(\\)|(\/)|(@)/g, function(_,rbar,bar,at) { if (rbar) return '@'; if (bar) return '@b'; if (at) return '@@'; } ); 加载时,其相反: mystring.replace(/(@@)|(@b)|(@)/g, fu
mystring.replace(/(\\)|(\/)|(@)/g, function(_,rbar,bar,at) {
if (rbar) return '@';
if (bar) return '@b';
if (at) return '@@';
} );
加载时,其相反:
mystring.replace(/(@@)|(@b)|(@)/g, function(_,at,bar,rbar) {
if (at) return '@';
if (bar) return '/';
if (rbar) return '\/';
} );
很明显,它是有效的
然而,我有一个疑问。ecmascript正则表达式是否确保按顺序测试交替运算符之间的匹配?例如,第二个调用在输入
'@@'
?时将永远不会返回'\/\/'
,是的,顺序很重要
|正则表达式运算符将两个选项分开。该模式首先尝试匹配左边的备选方案(后面是正则表达式的续集);如果失败,它将尝试匹配正确的析取(后跟正则表达式的续集)
使用更简单的措辞:
x | y
匹配“x”或“y”(如果“x”不匹配)