Match between simple delimiters, but not delimiters themselves

前端 未结 2 649
悲&欢浪女
悲&欢浪女 2021-01-28 12:15

I was looking at JSON data that was just in a text file. I don\'t want to do anything aside from just use regex to get the values in between quotes. I\'m just using this as a

相关标签:
2条回答
  • 2021-01-28 12:45

    You have two choices to solve this problem:

    Use capturing groups

    You can match the delimiters and use capturing groups to get the text within. In this case your two regexes will work, but you need to use access capturing group 1 to get the results (demo). See How do you access the matched groups in a JavaScript regular expression? for how to do that.

    Use zero-width assertions

    You can use zero-width assertions to match only the text within, require delimiters around them without actually matching them (demo):

    (?<=")(.*?)(?=")
    

    but now since I'm not consuming the quotes it'll find instances between each quote, not just between pairs of quotes: e.g., a"b"c" would find b and c.

    As for getting just the first match, I think that'll happen by default in JavaScript. You'd have to ask for repeated matching before you see the subsequent ones. So if you process your file one line at a time, you should get what you want.

    0 讨论(0)
  • 2021-01-28 12:50

    get the values in between quotes

    One thing to keep in mind is that valid JSON accepts escaped quotes inside the quoted values. Therefore, the RegEx should take this into account when capturing the groups which is done with the “unrolling-the-loop” pattern.

    var pattern = /"[^"\\]*(?:\\.[^"\\]*)*"/g;
    var data = {
      "value": "This is \"stuff\".",
      "empty": "",
      "null": null,
      "number": 50
    };
    var dataString = JSON.stringify(data);
    console.log(dataString);
    var matched = dataString.match(pattern);
    matched.map(item => console.log(JSON.parse(item)));

    0 讨论(0)
提交回复
热议问题