ruby - 给定一个 HTML 字符串,查找浮动 < > 的最佳方法是什么
问题描述
给定一个 HTML 字符串:
myhtml = "<title> my title </title>"
true
如果存在浮动/未转义的<
or>
以及有问题的字符本身,我该如何编写一个返回的函数?例子:
myhtml = "<title> my title </title>"
hasFloating(myhtml) => false
myhtml = "<title> < </title>"
hasFloating(myhtml) => true, <
myhtml = "<title> > </title>"
hasFloating(myhtml) => true, >
请记住,这个字符串可能是一段巨大的 HTML 代码,其中包含多个元素。我也可以使用一个函数检查是否存在未转义字符,第二个函数返回违规字符本身
编辑:为了记录,我也在mechanize
这个项目中使用 gem
解决方案
如果您只想检查是否有未闭合的尖括号,则不需要花哨的宝石。
你可以只使用StringScanner
.
require 'strscan'
def has_floating(html)
open_angle = 0
scanner = StringScanner.new(html)
while scanner.scan(/<|>/)
case scanner.matched
when '<'
return [true, '<'] if open_angle == 1
open_angle += 1
when '>'
return [true, '>'] if open_angle == 0
open_angle -= 1
end
scanner.scan_until(/[^<>]+/)
end
return false
end
myhtml = "<title> my title </title>"
puts has_floating(myhtml).inspect
#=> false
myhtml = "<title> < </title>"
puts has_floating(myhtml).inspect
#=> [true, "<"]
myhtml = "<title> > </title>"
puts has_floating(myhtml).inspect
#=> [true, ">"]
推荐阅读
- javascript - 使用子-父依赖项对数组进行排序
- azure-devops - 通过 echo somtimes 设置变量会在末尾添加一个随机 '
- git - 来自分支 X 的分支 Y - 如何仅刷新原始分支 X?
- amazon-web-services - 跨实例的 aws 内存消耗问题
- docker - 如何从 docker-compose config 生成的文件中删除绝对路径?
- c# - 将字节数组转回 img
- html - 如何通过可下载的链接将文本保存为 .txt 文件?
- regex - 正则表达式删除部分字符串并替换另一部分
- accessibility - Office ui fabric Dropdown 读取组件焦点上的选定项
- javascript - 这在 Vue 中是未定义的,使用 debounce 方法