我错过了什么?试图让正则表达式来自json

时间:2017-01-11 23:25:07

标签: javascript json regex

我的这个正则表达式都在我的json文件中转义。

"\/^Grocer(?:ies|y)[ \\t]*(\\S+)?\/gmi"

然后我尝试将它放入一个新的正则表达式

  var re = new RegExp("\/^Grocer(?:ies|y)[ \\t]*(\\S+)?\/gmi");
  console.log(re.exec("Groceries"));

但它失败了。所以我想也许是逃避所以我使用了unescape()给了我。

  var re = new RegExp("/^Grocer(?:ies|y)[ \t]*(\S+)?/gmi");
  console.log(re.exec("Groceries"));

仍然失败。

3 个答案:

答案 0 :(得分:1)

我认为你正在寻找这个:

var re = new RegExp("^Grocer(?:ies|y)[ \t]*(\S+)?", "gmi");
console.log(re.exec("Groceries"));

输出:["Groceries", ...]

开头和结尾的/也会进行转义(\/),您可以包含这些内容。他们也需要被删除。

试试这个:

var s = "\/^Grocer(?:ies|y)[ \\t]*(\\S+)?\/gmi";
var parts = s.match(/\/(.*)\/(\w*)/);
var re = new RegExp(parts[1], parts[2]);
console.log(re.exec("Groceries"));

答案 1 :(得分:0)

JS中的正则表达式通常不需要字符串的引号,所以请尝试

 var re = new RegExp(/^Grocer(?:ies|y)[ \t]*(\S+)?/gmi);
 console.log(re.exec("Groceries"));

可在此处找到更多信息:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp

如果您循环遍历JSON对象,那么您可能需要为循环的每次迭代执行类似的操作

// while you are in the loop
var thisRegex = unescape( thisLoopItem ); // fill this in with the current item

// locate the final slash
var finalSlash = thisRegex.lastIndexOf('/');

// use substr to return the string before and after the slash to
// populate both parts of the RegExp function
var re = new RegExp( thisRegex.substr( 0, finalSlash ), thisRegex.substr( finalSlash + 1 ) );
console.log(re.exec("Groceries"));

这可能需要一些调整,但沿着这些方向的东西将起作用。

答案 2 :(得分:0)

RegExp构造函数签名如下

var re = new RegExp(pattern[, flags])

例如:new RegExp('abc', 'i');

因此,以下代码适合您。

var regTxt ="\/^Grocer(?:ies|y)[ \\t]*(\\S+)?\/gmi" // from Json
var regexParts = regTxt.match(/\/(.*)\/(\w*)/)
var re = new RegExp(regexParts[1], regexParts[2]);
console.log(re.exec("Groceries"));

输出:["Groceries", ..]