在Go语言中验证HTML字符串子串是否位于指定标签内
验证HTML字符串中子串是否位于指定标签内部
如果你有一段字符串形式的HTML代码,需要判断某个特定子串是否存在于<p>、<li>或<h2>标签内部,可以通过正则匹配结合字符串检查来实现。以下是需求示例及完整实现:
需求示例框架
stringifiedHTML = `<h2>Here is John Doe</h2> <div>Hi my name is Jane Bob.</div> <p>Joe Smith is my name.</p> <button>Jen Willis</button>` func betweenValidTags(input string, subStr string) bool { // 待实现逻辑 } fmt.Println(betweenValidTags(stringifiedHTML, "John Doe")) // true fmt.Println(betweenValidTags(stringifiedHTML, "Jane Bob")) // false fmt.Println(betweenValidTags(stringifiedHTML, "Joe Smith")) // true fmt.Println(betweenValidTags(stringifiedHTML, "Jen Willis")) // false
可用实现版本
通过正则表达式匹配指定标签的内容区域,再检查子串是否存在于这些区域内:
package main import ( "fmt" "regexp" "strings" ) var tagRegex = regexp.MustCompile(`<(p|li|h2)[^>]*>(.*?)<(/p|/li|/h2)>`) func betweenValidTags(input string, subStr string) bool { matches := tagRegex.FindAllStringSubmatch(input, -1) // 遍历所有匹配结果,检查子串是否在标签内容中 for _, match := range matches { // match[2]是标签开闭之间的文本内容 if len(match) > 2 && strings.Contains(match[2], subStr) { return true } } return false } var stringifiedHTML = `<h2>Here is John Doe</h2> <div>Hi my name is Jane Bob.</div> <p>Joe Smith is my name.</p> <button>Jen Willis</button>` func main() { fmt.Println(betweenValidTags(stringifiedHTML, "John Doe")) // true fmt.Println(betweenValidTags(stringifiedHTML, "Jane Bob")) // false fmt.Println(betweenValidTags(stringifiedHTML, "Joe Smith")) // true fmt.Println(betweenValidTags(stringifiedHTML, "Jen Willis")) // false }
实现说明
- 正则表达式
<(p|li|h2)[^>]*>(.*?)<(/p|/li|/h2)>用于匹配<p>、<li>、<h2>标签及其内部内容:<(p|li|h2)[^>]*>匹配带属性的标签开头(.*?)非贪婪匹配标签内的文本内容<(/p|/li|/h2)>匹配对应闭合标签
- 通过
FindAllStringSubmatch获取所有匹配结果,遍历后用strings.Contains检查子串是否存在于标签内容中
内容的提问来源于stack exchange,提问作者Milad
相关产品推荐
相关产品推荐

