Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to split string by Regex matching in JavaScript

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:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

[
   {"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');
            }
    
        }
    });

>Solution :

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.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading