You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 10:34:59