Regexp:不同分支的大小写不同的标志

时间:2017-10-26 17:29:21

标签: javascript regex

在Javascript中使用一些正则表达式。我希望能够将标志应用于正则表达式的不同部分。以下是我到目前为止的情况:

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');

基本上,这个问题被打破了以下正则表达式:

'/[\<\>\+\*\(\)\-\@\`]|(^|[^!><'=])=($|[^=])|\band\b|\bor\b|\bnot\b|\btrue\b|\bfalse\b|\b[\d.]+\b/gi'

然后我“清理”一些字符串,用于该正则表达式的任何匹配模式。结果是一个与任何模式都不匹配的值数组。

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的天才。

1 个答案:

答案 0 :(得分:0)

正如@WiktorStribiżew所说,在JS中,正则表达式标志着整个正则表达式,而不仅仅是其中的一部分。

你能做的是做两步。首先得到所有你可能的匹配和分支与不区分大小写的正则表达式,并在过滤掉区分大小写的正则表达式后必须使用区分大小写进行测试。