【问题标题】:Regex: Filter particular Pattern JAVASCRIPT/angular正则表达式:过滤特定模式 JAVASCRIPT/角度
【发布时间】:2026-01-24 17:50:01
【问题描述】:

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

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) 等等......

模式是

(文本:文本###文本###文本###文本###文本),(文本:文本###文本###文本###文本###文本)等等。 .....

我需要以结构形式(更好的 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");
  }

【问题讨论】:

标签: javascript regex


【解决方案1】:

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

你的代码可以改成

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

更多的正则表达式可以通过使用word 选择器和\w 来修改

【讨论】: