【问题标题】:Part of String Case Insensitive in JavaScript Regex (?i) option not workingJavaScript Regex (?i) 选项中不区分大小写的字符串的一部分不起作用
【发布时间】:2019-05-07 10:57:33
【问题描述】:

我正在使用 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)ustomParam\b:?.*?)}/

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

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

我什至只是为了初学者而尝试过,但这也没有用

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

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

【问题讨论】:

  • 您不能使正则表达式的 部分 不区分大小写,请在完整的正则表达式上使用 i 标志。
  • 坏消息:即使XRegExp cannot offer this functionality,您也只能在整个模式上使用(?i),并在模式开头声明它。在 XRegExp 中,您可以将正则表达式定义为 var regex = XRegExp('(?i)\\{(\\b' + key +'\\b:?.*?)\\}', 'g');
  • OKi 所以 JavaScript 正则表达式库很烂。 @WiktorStribiżew 如果您将评论作为答案发布,我会接受它作为答案

标签: javascript regex case-insensitive


【解决方案1】:

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

即使XRegExp cannot offer this functionality,您也只能在整个模式上使用(?i),并在模式开头声明它。

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

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

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

【讨论】:

    猜你喜欢
    • 2010-09-21
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多