javascript - 匹配一个词,其中候选者可以跨越连续的组(跨度)

标签 javascript html regex algorithm search

用户将提供一些搜索词。假设它是一个字符串,可能包含任何单词或特殊字符(例如 /?,$* 等)。

我需要匹配这个字符序列出现在 HTML 中的任何地方,即使搜索词跨越连续的跨度;在我的 HTML 中,特殊字符有时会单独包装。

例如:用户提供“你妈妈?”,有一段包含<span>Your mom</span><span class="special">?</span>

我需要一种有效的方法来确定 a) 查询确实存在,以及 b) 哪些元素包含查询。搜索到的文本可以是复杂的 HTML,包含大量单词、span、div 等。

最佳答案

我可能会尝试编写一个解析器来区分标签的开始和结束,以及它们的文本内容(希望 HTML 不包含不完整的标签)。对于索引,也许你可以使用一堆元组,每个元组代表深度和计数,以及当前状态的内存。您的简单示例将索引为:

[(1,1)] tag opens, text: 'Your mom'
query text matches so far
[(1,1),(1,1)] tag closes, remove. 
[(1,2)] tag opens, maintain depth, increase count, text: '?'
query text continues to match
[(1,2)] tag closes, remove

关于javascript - 匹配一个词,其中候选者可以跨越连续的组(跨度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37288402/

相关文章:

javascript - 在数据表中使用 onchange 函数

html - 是否可以继承/使用父级的列模板?

javascript - 无互联网连接时重定向到缓存页面

java - 为什么转义字符不能用于替换所有括号?

java - Java 中无效的转义序列(有效的是\b\t\n\f\r\"\'\\)

sql - 使用 oracle sql substr 获取最后一位数字

Javascript/CSS 灯箱仅适用于第一个元素?

javascript - 尝试映射 Enum 键以生成 JSX 元素时出现 Typescript 错误

javascript - 在 Controller 中正确使用 Angular 平移

php - Jquery 翻盖脚本未在翻盖背面显示独特内容