我的这个正则表达式都在我的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"));
仍然失败。
答案 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", ..]