在Javascript中使用一些regexp。我希望能够将标志应用到regexp的不同部分。这是我到目前为止所知道的:
const expressionRegexPattern = new RegExp([
/[\<\>\+\*\(\)\-\@\`]/, // math and other symbols except "="
/|(^|[^!><'=])=($|[^=])/, // only single "=" are valid
/|\band\b|\bor\b|\bnot\b/, // bitwise operators
/|\btrue\b|\bfalse\b/, // bools
/|\b[\d.]+\b/ // numbers
].map(function (r) {
return r.source;
}).join(''), 'gi');基本上,这个get被分解成以下正则表达式:
'/[\<\>\+\*\(\)\-\@\`]|(^|[^!><'=])=($|[^=])|\band\b|\bor\b|\bnot\b|\btrue\b|\bfalse\b|\b[\d.]+\b/gi'然后,我“清理”一些字符串,查找该regexp的任何匹配模式。结果是一个不匹配任何模式的值数组。
const expression = 'TEST > 0.1 and something_else not true';
const cleansedArray = expression.replace(conditionExpressionRegexPattern, ' ').trim().split(/ +/);结果将是一个包含以下内容的数组:
['TEST', 'something_else']我想要做的是“添加”到这个正则表达式中,这样我就可以测试字符串的其他分支,但使它区分大小写。我不能将它们添加到第一个正则表达式中,因为它有不区分大小写的标志。大概是这样的:
const expressionRegexPattern = new RegExp([
/[\<\>\+\*\(\)\-\@\`]/, // math and other symbols except "="
/|(^|[^!><'=])=($|[^=])/, // only single "=" are valid
/|\band\b|\bor\b|\bnot\b/, // bitwise operators
/|\btrue\b|\bfalse\b/, // bools
/|\b[\d.]+\b/ // numbers
].map(function (r) {
return r.source;
}).join(''), 'gi') && new RegExp([/|\bmA\b|\bV\b|\bA\b/], 'g');这不起作用,但希望能让您了解我想要实现的目标。单词mA,V和a将被匹配,但不是MA,V,a。我希望一些特定的“单词”是区分大小写的匹配,并将其捆绑到我的另一个全局不区分大小写的正则表达式中。
希望我以一种清晰的方式解释了这一点!我已经对此进行了相当长的一段时间的研究,所以我想我应该问一下SO的天才们。
发布于 2017-10-27 02:35:10
正如@Wiktor Stribiżew所说,在JS中,正则表达式标志作用于整个正则表达式,而不仅仅是其中的一部分。
你可以做的是做一个两步的过程。首先使用不区分大小写的正则表达式进行所有可能的匹配和分支,然后使用区分大小写的正则表达式过滤掉那些必须以区分大小写进行测试的对象。
https://stackoverflow.com/questions/46960429
复制相似问题