Devora
Devora

Reputation: 357

Splitting a string into specific result in javascript

I have an exact string below

string a = "@David<br/>0044332 Awesome product! (John) 2013-09-02<br/>0044332 Delivered on time (Alice) 2014-02-26"

I am trying to split the above string into the result below

string productNo = "0044332"
string customercomment = "0044332 Awesome product! (John) 2013-09-02<br/>0044332 Delivered on time (Alice) 2014-02-26"

How can i split it to remove the @David, get the productNo and then the rest as the comment from string a?

Upvotes: 0

Views: 55

Answers (3)

Shidersz
Shidersz

Reputation: 17190

If you first split your string by <br> then you can get an array with the different data:

const a = "@David<br/>0044332 Awesome product! (John) 2013-09-02<br/>0044332 Delivered on time (Alice) 2014-02-26";

let data = a.split(/<br\/>/);
console.log(data);

Now, for get the productNo you can perform a String::match() to get the first match of sequential numbers on any of the elements of the previous array that isn't at index 0. You have all the messages on the array indexes 1 to array.length, but if you need to get they together again, you can Array::join() they back.

const a = "@David<br/>0044332 Awesome product 123! (John) 2013-09-02<br/>0044332 Delivered on time (Alice) 2014-02-26";

let data = a.split(/<br\/>/);
console.log(data);

// Get product number from string on index 1.
let productNo = data[1].match(/\w+/)[0];

// Join back all messages.
let customerComments = data.slice(1).join("<br>");

// Show information.
console.log(productNo);
console.log(customerComments);

Upvotes: 1

mplungjan
mplungjan

Reputation: 178422

I assume you also want Alice's bits?

const a = "@David<br/>0044331 Awesome product! (John) 2013-09-02<br/>0044332 Delivered on time (Alice) 2014-02-26"
const parts = a.split("<br/>")
parts.shift()
console.log(parts)
parts.forEach(function(part) {
  let bits = part.split(" ");
  console.log(bits[0],":",bits.slice(1).join(" "))
});
  

Upvotes: 0

Taplar
Taplar

Reputation: 24965

You could use replace() to match on the pieces you want and pull them out.

var test = "@David<br/>0044332 Awesome product! (John) 2013-09-02<br/>0044332 Delivered on time (Alice) 2014-02-26";
var orderNumber;
var comment;

test.replace(/^[^>]+<br\/>(\d+)(.+)$/, function(_, match1, match2){
  orderNumber = match1;
  comment = match1 + match2;
});

console.log(orderNumber);
console.log(comment);

Upvotes: 2

Related Questions