JavaScript 将搜索匹配存储在数组中
Posted
技术标签:
【中文标题】JavaScript 将搜索匹配存储在数组中【英文标题】:JavaScript storing search matches in array 【发布时间】: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
</textarea>
目标是所有被'--'包围的单词。在 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 的问题,描述您期望它做什么,它正在做什么,并询问原因。)
【参考方案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);
<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>
【讨论】:
非常感谢!它是如此干净和说明性! 是的,当分隔符大小相等时,它适用于这种情况。但是,它可以很容易地适应其他场景。【参考方案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.添加字符串如果在数组中找不到,则找到数组。)如果您发现我的回答有帮助,请考虑对其进行投票(左侧的向上箭头)。以上是关于JavaScript 将搜索匹配存储在数组中的主要内容,如果未能解决你的问题,请参考以下文章
javascript - 在对象数组中,返回任何值与特定字符串匹配的对象