-9

I need to filter a repetitive pattern inside a string. The string is:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo >ligula eget dolor >>(Special:Loremipsumdollar###loremipsumdollar###loremipsumdollar ### >3.4039###verified),(Special:Loremipsumdollar###loremipsumdollar###loremipsumdollar ### >3.4039###verified) and so on......

The pattern is

(text:text###text###text###text###text),(text:text###text###text###text###text) and so on......

I need to extract all of the data in a structural form (Better JSON ). If anybody can help me?

I am trying this stuff and it only returns a single match.

var txt='(Special:Loremipsumdollar###loremipsumdollar###loremipsumdollar ###3.4039###verified),(Special:Loremipsumdollar###loremipsumdollar###loremipsumdollar ###3.4039###verified)';

  var re1='.*?';    // Non-greedy match on filler
  var re2='(?:[a-z][a-z]+)';    // Uninteresting: word
  var re3='.*?';    // Non-greedy match on filler
  var re4='((?:[a-z][a-z]+))';  // Word 1
  var re5='.*?';    // Non-greedy match on filler
  var re6='((?:[a-z][a-z]+))';  // Word 2
  var re7='.*?';    // Non-greedy match on filler
  var re8='((?:[a-z][a-z]+))';  // Word 3
  var re9='.*?';    // Non-greedy match on filler
  var re10='([+-]?\\d*\\.\\d+)(?![-+0-9\\.])';  // Float 1
  var re11='.*?';   // Non-greedy match on filler
  var re12='((?:[a-z][a-z]+))'; // Word 4



  var p = new RegExp(re1+re2+re3+re4+re5+re6+re7+re8+re9+re10+re11+re12,["i"]);
  var m = p.exec(txt);

  if (m != null)
  {
      var word1=m[1];
      var word2=m[2];
      var word3=m[3];
      var float1=m[4];
      var word4=m[5];
      document.write("("+word1.replace(/</,"&lt;")+")"+"("+word2.replace(/</,"&lt;")+")"+"("+word3.replace(/</,"&lt;")+")"+"("+float1.replace(/</,"&lt;")+")"+"("+word4.replace(/</,"&lt;")+")"+"\n");
  }
Mistalis
  • 17,793
  • 13
  • 73
  • 97
  • A duplicate of [How do I retrieve all matches for a regular expression in JavaScript?](https://stackoverflow.com/questions/6323417/how-do-i-retrieve-all-matches-for-a-regular-expression-in-javascript) – Wiktor Stribiżew Mar 10 '19 at 15:38

1 Answers1

0

The problem is that exec returns a single match and all of its capture groups. To get all the matches, you must call exec multiple times until it finally returns null.

Your code can be changed to

var text = '(Special:Loremipsumdollar###loremipsumdollar###loremipsumdollar ###3.4039###verified),(Special:Loremipsumdollar###loremipsumdollar###loremipsumdollar ###3.59###verified)';

var regEx = /.*?(?:\w+).*?((?:\w+)).*?((?:\w+)).*?((?:\w+)).*?([+-]?\d*\.\d+).*?((?:\w+))/g;

var result, allMatches = [];
while ((result = regEx.exec(text)) != null) {

  // Get all the matches in a variable
  var item = {};
  for (var i = 1; i < result.length; i++) {
    item['word' + i] = result[i];
  }

  allMatches.push(item);

}

console.log(allMatches);

More over yor regular expression can be modified by using the word selector by using \w

Gabriele Ciech
  • 7,805
  • 3
  • 15
  • 15