【问题标题】:convert string regex to regex with tag i [duplicate]将字符串正则表达式转换为带有标签 i 的正则表达式 [重复]
【发布时间】:2019-09-25 12:37:27
【问题描述】:

好的,我有一个问题,在我的数据库中,我存储了由 URL 生成的 regexPath。 我用这个包path-to-regex

所以我将转换后的正则表达式路径作为字符串存储在数据库中,如下所示:

let path = "/v1/manager/notification/all"
let regexPath = "/^\/v1\/manager\/notification\/all(?:\/)?$/i"

我需要 test() 函数来检查某些情况。 当然 test() 函数需要一个正则表达式格式来检查值是否存在于正则表达式中。我在互联网上找到的将字符串转换为正则表达式的唯一方法是:

let RegexPattern = new RegExp(regexPath)

但 RegExp 函数将我的 i 标记视为他自己的正则表达式的一部分,它返回如下内容:

/"\/^\\\/v1\\\/manager\\\/notification\\\/all\\\/page\\=([^\\=\\\/]+?)(?:\\\/)?$\/i"/

我应该如何解决这个问题?

【问题讨论】:

  • 捕获并删除最后一个/之后的最后一个值,然后将其传递给新的正则表达式,并将捕获的值作为标志传递,new RegExp(pattern, flag)
  • 您能否将正则表达式选项(示例中的最后一个“i”)存储为数据库中的另一列?
  • @AndrewMorton 是的,我可以,但我认为现在我可以在存储到数据库之前删除标签,就像代码狂人提到的那样。

标签: javascript node.js regex


【解决方案1】:

您需要先提取内部正则表达式和标志。这是一个例子:

const path = "/v1/manager/notification/all"
const regexPath = "/^\/v1\/manager\/notification\/all(?:\/)?$/i"

const separator = regexPath.lastIndexOf('/')

const pattern = regexPath.slice(1, separator)
const flags = regexPath.slice(separator + 1)

const regex = new RegExp(pattern, flags)

console.log('Pattern: ' + pattern)
console.log('Flags: ' + flags)
console.log('Regex: ' + regex)

【讨论】:

    【解决方案2】:

    根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp,您需要自己提取修饰符并将它们作为第二个参数传入。您还需要删除前导斜杠和尾随斜杠。

    new RegExp(pattern[, flags])
    

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 2023-03-11
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      • 2022-11-18
      • 2011-10-02
      • 2016-04-02
      相关资源
      最近更新 更多