编程语言
首页 > 编程语言> > JavaScript正则表达式(?i)选项中不区分大小写的字符串不起作用

JavaScript正则表达式(?i)选项中不区分大小写的字符串不起作用

作者:互联网

好吧,在所有管理员开始标记此问题重复引用此SO问题How to make regex case-insensitive?之前
我想澄清的是,其他提到的问题没有解决我的问题.

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

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

但是随着以下错误而中断

SyntaxError: Invalid regular expression: /{(\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");

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

解决方法:

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

即使是XRegExp cannot offer this functionality,也只能在整个模式上使用(?i),在模式开始时将其声明.

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

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

标签:javascript,regex,case-insensitive
来源: https://codeday.me/bug/20191011/1891710.html