JavaScript Regex(?i)选项中字符串大小写不敏感的部分不起作用

Part of String Case Insensitive in JavaScript Regex (?i) option not working

本文关键字:不起作用 大小写 字符串 Regex 选项 JavaScript      更新时间:2023-09-26

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

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

但它打破了以下错误

SyntaxError:无效的正则表达式:/{(''b(?i)c(?-i)customParam''b:?.*?)}/

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

当我从外部源获得密钥时,我会在第一个字母表之前附加(?I),在第一个字符表之后附加(?-I)。

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

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

我知道我可以使用"I"标志而不是上面的标志,但这不是我的用例。我这么做只是为了检查一下。

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

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

在XRegExp中,您可以将正则表达式ONLY定义为

var regex = XRegExp('(?i)''{(''b' + key +'''b:?.*?)''}', 'g');

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