Javascript Ecmascript正则表达式替换运算符(管道|)是否确保计算顺序?

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

我使用的是Javascript(版本5,如果有必要的话),我必须在不允许使用斜杠的上下文中存储字符串。在存储时,我漫不经心地写道:

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”不匹配)