简体   繁体   中英

Convert a multi-line string into a javascript object

I've my raw data that looks like this:

Last Name, First Name (Details-Details)      #ID
Last Name, First Name (Details-Details)      #ID
Last Name, First Name (Details-Details)      #ID
Last Name, First Name (Details-Details)      #ID
Last Name, First Name (Details-Details)      #ID
Last Name, First Name (Details-Details)      #ID
x1000

I'd like to convert into a loopable object with keys and values something like:

var d = {
    "FirstName LastName": "#ID";
    "FirstName LastName": "#ID";
    "FirstName LastName": "#ID";
    "FirstName LastName": "#ID";
    "FirstName LastName": "#ID";
    "FirstName LastName": "#ID";
};

How can convert this to a javascript object? I'm thinking stringify may be a good starting point. FirstName have different values. They are just for the purpose of demonstration

  • split the string at \\n
  • loop through each line using map
  • Use match with the regex /(.*), (.*) \\(.*\\)\\s+(.*)/ to get first name, last name into capturing groups ( demo )
  • create an object from the array using reduce

 let str = `LastName1, FirstName1 (Details-Details) #ID1 LastName2, FirstName2 (Details-Details) #ID2 LastName3, FirstName3 (Details-Details) #ID3` let output = str.split("\\n") .map(a => a.match(/(.*), (.*) \\(.*\\)\\s+(.*)/)) .reduce((r, [, last, first, id]) => { r[`${first} ${last}`] = id return r; },{}) console.log(output)

You can use regex to extract the data, use RegExp#exec method to extract data using a regular expression.

 var str = `Last Name1, First Name1 (Details-Details) j1 Last Name2, First Name2 (Details-Details) 32 Last Name3, First Name3 (Details-Details) 3 Last Nam4e, First Name4 (Details-Details) 4 Last Name5, First Name5 (Details-Details) 5 Last Name6, First Name6 (Details-Details) 6` // pattern for matching the string let reg = /([\\w ]+)\\b\\s?,\\s?([\\w ]+)\\b\\s*\\([^)]+\\)\\s*([\\w\\d]+)/g; // variable for storing match let m; // object for the result let res = {}; // iterate over the matches while (m = reg.exec(str)) { // define object property based on the match res[`${m[2]} ${m[1]}`] = m[3]; } console.log(res);

Regex explanation here.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM