为什么javascript中的正则表达式匹配在阿拉伯语中颠倒



我有一些文本正在尝试使用正则表达式。我需要在用阿拉伯文本包围的带有%符号的数字上进行匹配。我有一些正则表达式如下所示:

const re1 = new RegExp('\d*,\d*%');
const re2 = new RegExp('%\d*,\d*');

我有一些文本看起来像这样:

%9,2 ملمول/مول 77 أو 

我希望第二个正则表达式与文本匹配,但它是第一个与文本匹配的正则表达式。我确信这是有充分理由的,但我在文档中没有看到任何关于这一点的内容。它为什么要这样做?将数字与阿拉伯文本中嵌入的百分号匹配的正确方法是什么?

我希望第二个正则表达式与文本匹配

这正是发生的事情:

const re1 = new RegExp('\d*,\d*%');
const re2 = new RegExp('%\d*,\d*');
const str = '%9,2 ملمول/مول 77 أو'
console.log(re1, str.match(re1))
console.log(re2, str.match(re2))

这适用于我的机器(MacOs,美国文化(,运行Node.js v14.19.3:

const corpus = '%9,2 ملمول/مول 77 أو ';
const rx = /%(d+),(d+)/ ;
const m = rx.exec(corpus);
if (!m) {
console.log("no match found");
} else {
const [ match, value1, value2 ] = m;
console.log(`entire match: «${match}»`  );
console.log(`1st value:    «${value1}»` );
console.log(`2nd value:    «${value2}»` );
}

运行以上收益率:

entire match: «%9,2»
1st value:    «9»
2nd value:    «2»

最新更新