请注意,我尝试了一些建议,所以张贴关于regexp,没有任何帮助!来问这个问题-
我有这样的JSON数据(原件:https://api.myjson.com/bins/fvzpp):
{
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‘(字符串),这不是我想要的。
发布于 2017-10-08 16:08:08
您必须首先使用new RegExp()构造函数来解析regexp。
但是,您必须去掉前面和后面的斜杠:
function parseCardPattern(cardPattern) {
return new RegExp(cardPattern.substr(1, cardPattern.length - 2));
}现在可以使用regexp对象进行测试:
const visaPattern = parseCardPattern(response['VISA'].cardPattern);
console.log(visaPattern.test('4242424242')); // => True发布于 2017-10-08 16:05:39
如果我没有误解你的问题。像这样抓住cardPattern,json.VISA.cardPattern,然后尝试像这样
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}`);
});
}https://stackoverflow.com/questions/46633090
复制相似问题