JavaScript将搜索匹配项存储在数组中

JavaScript storing search matches in array

本文关键字:存储 数组 搜索 JavaScript      更新时间:2023-09-26

如何存储从id="post_body"到数组的搜索匹配项?

<textarea name="post[body]" id="post_body">

--Lorem ipsum——dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incidicount ut labore et--多洛雷——巨大的aliqua。乌特尼姆和最小的威尼斯人,诺斯特鲁德·埃克劳姆科的工作人员,尼西和阿利奎普的前任。--Duis aute——irure dolor in reprechenderit in volupate velit esse cillum——Dolore——eu fugiat nulla pariatur

</textarea>

目标都是用"--"包围的单词。在Ruby中,我使用

matches = tex.scan(/--(.+?)--/).flatten
matches = matches.uniq

在这种情况下,阵列将是:

matches = ["Lorem ipsum", "Dolore", "Duis aute"];

注意:单词"Dolore"出现两次,用--包围,但在数组中应该只存储一次。

    var text = document.getElementById('post_body').value;
    var res = text.match(/--'w+'s*'w*--/g);
     //remove duplicates
    uniqueArray = res.filter(function(item, pos, self) {
      return self.indexOf(item) == pos;
    });
     //remove "--" parts
    finalArray = uniqueArray.map(function(item) {
      return item.replace(/--/g,"");
    });
    alert(finalArray);
<textarea name="post[body]" id="post_body">--Lorem ipsum-- dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et --Dolore-- magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. --Duis aute-- irure dolor in reprehenderit in voluptate velit esse cillum --Dolore-- eu fugiat nulla pariatur</textarea>

您可以使用以下代码:

function contains(a, obj) {
    var i = a.length;
    while (i--) {
       if (a[i] === obj) {
           return true;
       }
    }
    return false;
}
var re = /--'s*(.*?)'s*--/g; 
var str = '--Lorem ipsum-- dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et --Dolore-- magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. --Duis aute-- irure dolor in reprehenderit in voluptate velit esse cillum --Dolore-- eu fugiat nulla pariatur';
var arr = [];
while ((m = re.exec(str)) !== null) {
    if (!contains(arr, m[1]))
    { 
        arr.push(m[1]);
    }
 }
alert(arr);

正则表达式将匹配--中包含的文本,并仅在数组中不存在值的情况下将第一个捕获组文本放入数组arrcontains函数取自此SO post)。

至于正则表达式,添加到--'s*(.*?)'s*--中的's*将修剪内部的值。如果不需要修剪,请删除这些's*