首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何处理作为字符串返回的Regex?

如何处理作为字符串返回的Regex?
EN

Stack Overflow用户
提问于 2017-10-08 15:57:08
回答 2查看 56关注 0票数 1

请注意,我尝试了一些建议,所以张贴关于regexp,没有任何帮助!来问这个问题-

我有这样的JSON数据(原件:https://api.myjson.com/bins/fvzpp):

代码语言:javascript
运行
复制
{
  VISA: {
    cardPattern: "/^4/",
    cardNumberLength: 16,
    cvv: "required",
    cvvLength: 3,
    displayText: "Visa"
  },
  MASTERCARD: {
    cardPattern: "/^5[1-5]/",
    cardNumberLength: 16,
    cvv: "required",
    cvvLength: 3,
    displayText: "Master"
  },
  MAESTRO: {
    cardPattern:
      "/^(50|63|66|5[6-8]|6[8-9]|600[0-9]|6010|601[2-9]|60[2-9]|61|620|621|6220|6221[0-1])/",
    cardNumberLength: 19,
    cvv: "optional",
    cvvLength: 4,
    displayText: "Maestro"
  }
}

请查看cardPattern属性,它是字符串格式的。如何使用相同的方法测试字符串(例如,445)。例如,"/^4/".test(mysttring)不起作用。并且var reg =新的RegExp("/^4/")返回一个奇怪的//^4//,它永远不会匹配mystring。如何处理regex这样的响应?更明确的是,如何处理响应‘’VISA‘.charPattern.test(4545)--这应该是有效的,但是没有!

而且,响应不是JSON格式,而是对象内部的对象。解析这种响应的最佳方法是什么?我尝试了-in循环,但返回'VISA','MASTERCARD‘和’MAESTRO‘(字符串),这不是我想要的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-08 16:08:08

您必须首先使用new RegExp()构造函数来解析regexp。

但是,您必须去掉前面和后面的斜杠:

代码语言:javascript
运行
复制
function parseCardPattern(cardPattern) {
  return new RegExp(cardPattern.substr(1, cardPattern.length - 2));
}

现在可以使用regexp对象进行测试:

代码语言:javascript
运行
复制
const visaPattern = parseCardPattern(response['VISA'].cardPattern);
console.log(visaPattern.test('4242424242'));  // => True
票数 2
EN

Stack Overflow用户

发布于 2017-10-08 16:05:39

如果我没有误解你的问题。像这样抓住cardPattern,json.VISA.cardPattern,然后尝试像这样

代码语言:javascript
运行
复制
let json = {"VISA":{"cardPattern":"/^4/","cardNumberLength":16,"cvv":"required","cvvLength":3,"displayText":"Visa"},"MASTERCARD":{"cardPattern":"/^5[1-5]/","cardNumberLength":16,"cvv":"required","cvvLength":3,"displayText":"Master"},"MAESTRO":{"cardPattern":"/^(50|63|66|5[6-8]|6[8-9]|600[0-9]|6010|601[2-9]|60[2-9]|61|620|621|6220|6221[0-1])/","cardNumberLength":19,"cvv":"optional","cvvLength":4,"displayText":"Maestro"}};
const regex = json.VISA.cardPattern;
const str = `4545`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }

    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46633090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档