【问题标题】:JavaScript storing search matches in arrayJavaScript 将搜索匹配存储在数组中
【发布时间】:2015-09-15 13:53:44
【问题描述】:

如何将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 reprehenderit in voluptate velit esse cillum --Dolore-- eu fugiat nulla pariatur

&lt;/textarea&gt;

目标是所有被'--'包围的单词。在 Ruby 中,我这样做是:

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

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

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

注意:单词“Dolore”出现了两次,被 -- 包围,但在数组中它应该只存储一次。

【问题讨论】:

  • 您从document.getElementById('post_body').value.match(/--(.+?)--/) 开始,然后将其缩减以获得唯一值。
  • "如何将 id="post_body" 中的搜索匹配存储到数组中?" 1. 研究。 2. 实验。 3. 尝试。 (4. 如有必要, 1-3 之后:发布一个显示尝试使用MCVE 的问题,描述您期望它做什么,它正在做什么,并询问原因。)

标签: javascript arrays regex


【解决方案1】:

    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);
&lt;textarea name="post[body]" id="post_body"&gt;--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&lt;/textarea&gt;

【讨论】:

  • 非常感谢!它是如此干净和说明性!
  • 是的,当分隔符大小相等时,它适用于这种情况。但是,它可以很容易地适应其他场景。
【解决方案2】:

您可以使用以下代码:

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

正则表达式将匹配 -- 中包含的文本,并将第一个捕获组文本放入数组 arr 中,前提是该值不存在于数组中(contains 函数取自 this SO post) .

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

【讨论】:

  • 非常感谢!我从 javascript 开始,你的回答帮助我理解它是如何工作的。我一直在学习。
  • 很高兴你喜欢它。这只是另一种方法:我不是执行后期处理,而是执行排除它的逻辑步骤(1.获取捕获的文本,2.检查文本是否已经在数组中。3.添加字符串如果在数组中找不到,则找到数组。)如果您发现我的回答有帮助,请考虑对其进行投票(左侧的向上箭头)。
猜你喜欢
  • 2012-08-27
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 2020-03-08
相关资源
最近更新 更多