【问题标题】:Multiple (?i) and (?-i) modifiers within js regexp patternjs regexp 模式中的多个 (?i) 和 (?-i) 修饰符
【发布时间】:2018-02-09 21:59:18
【问题描述】:

我正在使用nodejs v8.9.4 和typescript v2.6.2。我想构建一个Regexp,它可以像(?i)(?-i) modifier spans 一样打开和关闭区分大小写,例如在.NET 环境中。
我想完成类似的事情:

let value = 'HelloWorld';
let pattern = '(?i)\\b(' + value + ')\\:|' +
    '(?-i)\\b(' + value.toUpperCase() + '|' + value + ')\\b';
let myRegex = new RegExp(pattern, 'g');

myRegex.test('helloworld');  // returns false
myRegex.test('helloworld:'); // returns true
myRegex.test('HELLOWORLD');  // returns true
myRegex.test('HelloWorld');  // returns true

很遗憾 javaScript 不支持修饰符跨度

所以我想问有没有办法在 javaScript 中构建 Rexep,就像上面示例中的 myRegex,其中 value 是可分配/可交换的。
欢迎任何提示,提前致谢。

【问题讨论】:

  • 这就是你要使用它的实际方式吗?有那个特定的模式?
  • 是的,我想使用那个特定的模式。
  • 那你能做两个RegExps吗?一个带有第一部分和'gi',一个带有第二部分和'g'a.test(input) || b.test(input)?
  • 一般来说这是可行的。就我而言,我会经常调用该正则表达式(每分钟最多> 60次)并评估其index以更新文档是否已更改。所以我认为由于性能问题,一个单一的正则表达式将是更可取的方法。
  • 即使XRegExp 也无法处理这个问题。所以没有单行正则表达式解决方案。

标签: javascript node.js regex typescript


【解决方案1】:

按照 Ryan 在 cmets 中的建议,我将 Regexp 分成两部分。到目前为止,我没有遇到任何性能问题或类似问题。
感谢 cmets 的小伙伴们的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 2017-10-23
    • 2015-05-24
    • 1970-01-01
    • 2016-09-02
    • 2014-02-22
    相关资源
    最近更新 更多