【问题标题】:Javascript array string to regex literalJavascript数组字符串到正则表达式文字
【发布时间】:2012-03-07 20:50:11
【问题描述】:

我在这里有一个工作示例:http://jsfiddle.net/R7KuK/

我尝试创建一个包含带有正则表达式分隔符和设置标志的完整正则表达式的数组,但是 RegExp 对象将给定的字符串解析为字符串,而不是正则表达式。

  var regex = "/wolves/i"

对比

  var regex = /wolves/i

我的问题是:如何将字符串化的正则表达式转换为实际的正则表达式?


更新:直到Felix King 向我解释了这一点

var array = ["/wolves/i", "/Duck/"];

可以安全地变成:

var array = [/wolves/i, /Duck/];

【问题讨论】:

  • 为什么不将数组创建为[/wolves/i, /Duck/]?为什么要使用字符串?这对我来说似乎是一个不必要的并发症。
  • @FelixKling:我什至不知道这是可能的,不要使用引号。
  • 你是如何创建正则表达式的? /.../ 表示正则表达式文字。您之前一定使用过/.../.test(...)str.match(/.../)。无论如何,这里有一些文档:developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions
  • @FelixKling:是的,我一直在使用str.match(/.../),尽管我不知道可以不在数组中使用字符串,假设正则表达式可能包含未转义的字符并失败;或者我可能试图匹配一个点并意外关闭一个数组项。

标签: javascript regex arrays


【解决方案1】:

试试这个:

var regexSplit = regex.split( '/' );
var realRegex = new RegExp( regexSplit[1], regexSplit[2] );

或者更好:

var regexMatch = regex.match( /^\/(.*)\/([^\/]*)$/ );
var realRegex = new RegExp( regexMatch[1], regexMatch[2] );

如果您的正则表达式包含“/”,则更好的原因是第一个将失败。 ;)

【讨论】:

    【解决方案2】:

    here偷来的:

    使用 RegExp 对象构造函数从字符串创建正则表达式:

    var re = new RegExp("a|b", "i");
    // same as
    var re = /a|b/i;
    

    【讨论】:

    • 如果您逐字复制另一个答案,那么这个问题不应该作为重复关闭吗?
    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2013-01-21
    • 2021-10-17
    • 2012-04-26
    相关资源
    最近更新 更多