2017-10-08 16 views
1

親切にも、私はregexpに関して他のSO投稿からいくつかの提案を試みましたが、何も助けませんでした!!! は質問に来る -文字列として返されるRegexの扱い方は?

私は(元:https://api.myjson.com/bins/fvzpp):このような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" 
    } 
} 

は、文字列形式であるcardPatternプロパティを参照してくださいしてください。どのように私は文字列をテストするために同じものを使用するのですか(例えば445)。 たとえば、 "/^4/".test(mysttring)は機能しません。また var reg = new RegExp( "/^4 /")は、ミストリングと決して一致しない奇妙な//^4 //を返します。 このような正規表現の応答を処理する方法は?より明確にするには、応答['VISA']を処理するにはどうすればよいはずですか?cardPattern.test(4545)

また、レスポンスはJSON形式ではなく、オブジェクト内部のオブジェクトです。そのような応答を解析する最善の方法は何ですか?私はfor-inループを試しましたが、それは 'VISA'、 'MASTERCARD'、そして 'MAESTRO'(文字列)を返します。

+0

この/^4/.testようにしてみてください(...)または新しいRegExp( "^ 4") –

+0

@AdarshMohan - これは重要なことではありません。呼び出しの例からの対処方法 - レスポンス['VISA']。cardPattern.test(4545)?それはうまくいかなければならないが、!!! –

+1

先頭と末尾のスラッシュを削除し、RegExpの引数として新しいRegExp(response.VISA.cardPettern.replace( "/"、 "")replace(/ \/$ /、 ""))のように渡します。テスト(4545);多分あなたは2つの置換を単一の正規表現と組み合わせることができます –

答えて

2

のようにしてみてください。

ただし、先頭と末尾のスラッシュを取り除く必要があります:

function parseCardPattern(cardPattern) { 
    return new RegExp(cardPattern.substr(1, cardPattern.length - 2)); 
} 

あなたは今、テストのために正規表現オブジェクトを使用することができます。

const visaPattern = parseCardPattern(response['VISA'].cardPattern); 
console.log(visaPattern.test('4242424242')); // => True 
0

私はあなたの質問に誤解していない場合。このjson.VISA.cardPatternようcardPatternつかみ、その後、あなたが最初に正規表現を解析するためにnew RegExp()コンストラクタを使用する必要があります。この

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}`); 
    }); 
} 
関連する問題