0

I am already trying for over an hour and cant figure out the right way to do it. I have this Regex:

const search = /("Response)\s+\d+\s+(of)\s+\d+(":)\s+/g;

I have this string:

{"Response 1 of 2": {"Name": "Jouny", "Class": "TR23", "Message Type": "Offer", "ID Identifier": "19256", "Address": "hjfhfgjhjhj"}, "Response 2 of 2": {"Name": "Sarah", "Class": "BHT56", "Message Type": "Alarm", "ID Identifier": "89756767", "Address": "oplkdhdggd"}}

I would like to have a result like this:

[
   {"Name": "Jouny", "Class": "TR23", "Message Type": "Offer", "ID Identifier": "19256", 
        "Address": "hjfhfgjhjhj"},
   {"Name": "Sarah", "Class": "BHT56", "Message Type": "Alarm", "ID Identifier": "89756767", 
        "Address": "oplkdhdggd"}
 ]

my code:

var lines = results.toString().split(/\n/);
lines.forEach(function (item) {
    if (item.indexOf(myData) > 0) {
        var json = item.slice(item.indexOf(script) + script.length + 2).replace(PRINTABLE_CHAR, '');
        var jsonMatch = json.split(json.match(search));
        var result = jsonMatch.substr(0, jsonMatch.lastIndexOf('}')).replace(PRINTABLE_CHAR, '');
        try {
                data = JSON.parse(result);
            } catch (e) {
                console.log('ERROR');
            }
    
        }
    });
1
  • Why do you want to work around JSON with REGEX? Commented Dec 17, 2021 at 16:19

2 Answers 2

3

You can achieve the same result using Object.values

const initialObject = {"Response 1 of 2": {"Name": "Jouny", "Class": "TR23", "Message Type": "Offer", "ID Identifier": "19256", "Address": "hjfhfgjhjhj"}, "Response 2 of 2": {"Name": "Sarah", "Class": "BHT56", "Message Type": "Alarm", "ID Identifier": "89756767", "Address": "oplkdhdggd"}}


const resultObject = Object.values(initialObject);

console.log(resultObject);

Sign up to request clarification or add additional context in comments.

2 Comments

Thank you, but the type of json variable which I work on it, is String. and the result of Object.values is an array of characters, which is not what I respected
Then just convert it from a string to an object using json.parse(yourString)
0

This issue can be solved without regex. You can parse the first string as JSON using JSON.parse(string), then you can get the list of keys using Object.keys(json) and then do a forEach and push it to a list, which will get you what you want without having to deal with regex. I will show the code below

let string = '{"Response 1 of 2": {"Name": "Jouny", "Class": "TR23", "Message Type": "Offer", "ID Identifier": "19256", "Address": "hjfhfgjhjhj"}, "Response 2 of 2": {"Name": "Sarah", "Class": "BHT56", "Message Type": "Alarm", "ID Identifier": "89756767", "Address": "oplkdhdggd"}}'
let list = [] //this will be the list that we will return at the end
let data = JSON.parse(string) //parse the data into json

Object.keys(data).forEach(key => list.push(data[key])) //get the keys and iterate through it
return list //return the list

This should be a much better alternative to using regex. Regex was not made for what you are trying to do.

EDIT: Ah, follow @callback 's advice. Using object.values() would be a much better solution.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.