如何搜索HTML标签之间的文本

4

我正在使用mongoJS处理我的数据库查询。我遇到了一个问题,就是字符串中包含HTML标签,我正在使用正则表达式在集合中搜索我的字符串。如何忽略HTML标签来搜索文本?

var userInput = $scope.userInput; // value from user input
db.collections.find({'obj': {$regex: new RegExp(userInput) } }).toArray(function(err, result){ 
  return res.json(result); 
}

集合

[{_id:"34aw34d343s4", obj:"How are you?"},
{_id:"34asdfwer343s4", obj:"Are you okay?"},
{_id:"3sDaweqr43s4", obj:"Goodbye, my friend!"},
{_id:"34aw3sdfgds3s4", obj:"Do you know these are <strong>important</strong> items"}]

用户输入

these are
these
these are important

输出

[{_id:"34aw3sdfgds3s4", obj:"Do you know these are <strong>important</strong> items"}]
[{_id:"34aw3sdfgds3s4", obj:"Do you know these are <strong>important</strong> items"}]
[]

预期结果

[{_id:"34aw3sdfgds3s4", obj:"Do you know these are <strong>important</strong> items"}]
[{_id:"34aw3sdfgds3s4", obj:"Do you know these are <strong>important</strong> items"}]
[{_id:"34aw3sdfgds3s4", obj:"Do you know these are <strong>important</strong> items"}]

我还在试图弄清楚你为什么使用正则表达式。数据库的原始输出是什么?我也发现输入、输出和期望信息很混乱。如果您将用户输入硬编码为var userInput ="these are";,那么为什么有三个不同的输入呢? - Matthew Barbara
@MatthewBarbara userInput 仅是一个示例。在实际情况下,我有许多不同的字符串输入...有些没有HTML标记,有些包含HTML标记。 - Abel
3个回答

3
在将用户输入放入数据库之前,您应该对其进行过滤。据我了解,根据您的系统,用户输入(在插入数据库之前)很可能没有经过过滤,因此您的网站易受XSS攻击
我建议您使用像sanitize-html这样的库来保护您的网站免受跨站脚本攻击,并作为对这个问题的回答。

1
完全同意这一点。如果您想添加粗体内容,请尝试使用简写保存数据,并使用前端库将其呈现到DOM中。例如:{_id:“34aw3sdfgds3s4”,obj:“您知道这些是\ 重要\ 项目”} 然后,您可以使用*作为指针,在呈现时添加<strong>标签。这样更安全、更灵活。 - IzzyCooper

0
你可以使用 RegExp 的 test 方法:/these|are/.test(stringToCheckAgainst);

var testCases = ["these are", "these", "these are <strong>item</strong>"];

testCases.forEach(function(value) {
  document.write(/these|are/.test(value) + "\n");
});


输出应该是来自集合(MongoDB)的对象数组。 - Abel

-3
如果您想要删除HTML标签,则可以使用以下方法:
  1. jQuery(html).text();
  2. yourStr.replace(/<(?:.|\n)*?>/gm, '');
  3. yourStr.replace(/<[^>]+>/g, '');

更多信息请参见Strip HTML from Text JavaScript


1
我不确定这是否有效,但如果有效,它的方式很恶劣。 - Matthew Barbara
@Matthew Barbara,那么你的解决方案是什么? - forqzy
在我提出解决方案之前,我需要进一步澄清问题,因为目前对我来说还不太清楚。 - Matthew Barbara
@Matthew Barbara,我同意你的观点。如果他想要删除所有带有标签的内容,你有什么解决方案? - forqzy
我已经回复了。请查看我的答案并告诉我您的想法。谢谢。 - Matthew Barbara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接