首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regexp:为不同的分支设置不同的标志

问Regexp:为不同的分支设置不同的标志
EN

Stack Overflow用户
提问于 2017-10-27 01:29:21
回答 1查看 34关注 0票数 0

在Javascript中使用一些regexp。我希望能够将标志应用到regexp的不同部分。这是我到目前为止所知道的:

代码语言: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');

基本上,这个get被分解成以下正则表达式:

代码语言:javascript
复制
'/[\<\>\+\*\(\)\-\@\`]|(^|[^!><'=])=($|[^=])|\band\b|\bor\b|\bnot\b|\btrue\b|\bfalse\b|\b[\d.]+\b/gi'

然后,我“清理”一些字符串,查找该regexp的任何匹配模式。结果是一个不匹配任何模式的值数组。

代码语言:javascript
复制
const expression = 'TEST > 0.1 and something_else not true';
const cleansedArray = expression.replace(conditionExpressionRegexPattern, ' ').trim().split(/ +/);

结果将是一个包含以下内容的数组:

代码语言:javascript
复制
['TEST', 'something_else']

我想要做的是“添加”到这个正则表达式中,这样我就可以测试字符串的其他分支,但使它区分大小写。我不能将它们添加到第一个正则表达式中,因为它有不区分大小写的标志。大概是这样的:

代码语言: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') && new RegExp([/|\bmA\b|\bV\b|\bA\b/], 'g');

这不起作用,但希望能让您了解我想要实现的目标。单词mA,V和a将被匹配,但不是MA,V,a。我希望一些特定的“单词”是区分大小写的匹配,并将其捆绑到我的另一个全局不区分大小写的正则表达式中。

希望我以一种清晰的方式解释了这一点!我已经对此进行了相当长的一段时间的研究,所以我想我应该问一下SO的天才们。

EN

回答 1

Stack Overflow用户

发布于 2017-10-27 02:35:10

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

你可以做的是做一个两步的过程。首先使用不区分大小写的正则表达式进行所有可能的匹配和分支,然后使用区分大小写的正则表达式过滤掉那些必须以区分大小写进行测试的对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46960429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档