Ya llevo más de una hora intentándolo y no encuentro la forma correcta de hacerlo. Tengo esta expresión regular:
const search = /("Response)\s+\d+\s+(of)\s+\d+(":)\s+/g;tengo esta cadena:
{"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"}}Me gustaría tener un resultado como este:
[ {"Name": "Jouny", "Class": "TR23", "Message Type": "Offer", "ID Identifier": "19256", "Address": "hjfhfgjhjhj"}, {"Name": "Sarah", "Class": "BHT56", "Message Type": "Alarm", "ID Identifier": "89756767", "Address": "oplkdhdggd"} ]mi código:
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'); } } });Puede lograr el mismo resultado usando 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);Este problema se puede resolver sin expresiones regulares. Puede analizar la primera cadena como JSON usando JSON. parse (cadena), luego puede obtener la lista de claves usando Object.keys (json) y luego hacer un forEach y empujarlo a una lista, lo que le dará lo que desea sin tener que lidiar con expresiones regulares. Voy a mostrar el código a continuación
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 listEsta debería ser una alternativa mucho mejor al uso de expresiones regulares. Regex no fue hecho para lo que estás tratando de hacer.
EDITAR: Ah, sigue el consejo de @callback. Usar object.values() sería una solución mucho mejor.