正则表达式:过滤特定模式JAVASCRIPT / angular

时间:2016-10-19 12:16:06

标签: javascript regex

我需要过滤字符串中的重复模式。字符串是:

  

Lorem ipsum dolor坐下来,这是一种不可或缺的精神。 Aenean commodo> ligula eget dolor>>(Special:Loremipsumdollar ### loremipsumdollar ### loremipsumdollar ###> 3.4039 ### verified),(Special:Loremipsumdollar ### loremipsumdollar ### loremipsumdollar ### > 3.4039 ###已验证)等等......

模式是

  

(text:text ### text ### text ### text ### text),(text:text ### text ### text ### text ### text)等等。 .....

我需要以结构形式(Better JSON)提取所有数据。 如果有人可以帮助我吗?

我正在尝试这个东西,它只返回一个匹配。

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

1 个答案:

答案 0 :(得分:0)

问题是exec会返回单个匹配及其所有捕获组。要获得所有匹配项,必须多次调用exec,直到它最终返回null。

您的代码可以更改为

&#13;
&#13;
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);
&#13;
&#13;
&#13;

使用word

使用\w选择器可以修改更多正则表达式