JavaScript Regex (?i) 选项中的部分字符串不区分大小写

Vip*_*esh 6 javascript regex case-insensitive

我正在使用 Nodejs 来构建应用程序,我需要在其中处理某些字符串,为此我使用了 JS“RegExp”对象。我只希望正则表达式中的一部分字符串不区分大小写

var key = '(?i)c(?-i)ustomParam';
var find = '\{(\\b' + key +'\\b:?.*?)\}';
var regex = new RegExp(find,"g");
Run Code Online (Sandbox Code Playgroud)

但它因以下错误而中断

语法错误:正则表达式无效:/{(\b(?i)c(?-i)ustomParam\b:?.*?)}/

我将从某些外部源(如 redis)获取密钥,并从其他外部源获取要匹配的字符串,我希望第一个字母不区分大小写,其余字母区分大小写。

当我从外部来源获取密钥时,我将在第一个字母之前附加 (?i) 并在第一个字母之后附加 (?-i)。

我什至试过这个只是为了初学者,但这也不起作用

var key ='customParam';
var find = '(?i)\{(\\b' + key +'\\b:?.*?)\}(?-i)';
var regex = new RegExp(find,"g");
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用“i”标志而不是上面的标志,但这不是我的用例。我这样做只是为了检查。

Wik*_*żew 8

JavaScript 内置RegExp不支持内联修饰符,例如(?im),更不用说可以放置在模式内任何位置的内联修饰符组(例如(?i:....))。

甚至XRegExp 也不能提供这个功能,你只能(?i)在整个模式上使用,在模式开始时声明它。

在 XRegExp 中,您只能将正则表达式定义为

var regex = XRegExp('(?i)\\{(\\b' + key +'\\b:?.*?)\\}', 'g');
Run Code Online (Sandbox Code Playgroud)

2020 年 5 月 27 日,JavaScript 原生 RegExp 和 XRegExp 模式仍然不支持内联修饰符组(即(?i:...)),也不会将它们放置在模式的任何部分(就 XRegExp 而言)。