存储数组

时间:2015-06-29 07:22:50

标签: javascript arrays regex

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

<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 repreptderit in voluptate velit esse cillum --Dolore-- eu fugiat nulla pariatur

     

</textarea>

目标是由&#39; - &#39;包围的所有单词。在Ruby中,我这样做:

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

在这种情况下,数组将是:

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

注意:&#34; Dolore&#34;出现两次用--包围,但在数组中它应该只存储一次。

2 个答案:

答案 0 :(得分:2)

    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>

答案 1 :(得分:1)

您可以使用以下代码:

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

正则表达式将匹配--中包含的文本,并且仅当数组中不存在该值时才将第一个捕获组文本放入数组arrcontains函数为取自this SO post)。

对于正则表达式,添加到\s*的{​​{1}}将修改内部值。如果您不需要修剪,请删除这些--\s*(.*?)\s*--