You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package util
|
|
|
|
import (
|
|
"github.com/mizuki1412/go-core-kit/class/exception"
|
|
"golang.org/x/net/html"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
func RegexpFindFirst(content, regexpExpress string) string {
|
|
//`"remandCode":"([^"]+)"`
|
|
//`"installNum":(\d+(\.\d+)?)`
|
|
// 定义正则表达式匹配
|
|
re := regexp.MustCompile(regexpExpress)
|
|
// 在内容中查找匹配的字符串
|
|
match := re.FindStringSubmatch(content)
|
|
if len(match) < 2 {
|
|
panic(exception.New("regexp not found"))
|
|
}
|
|
// 第一个捕获组中的值即为要查找的
|
|
ok := match[1]
|
|
return ok
|
|
}
|
|
|
|
func HTMLContentFindFirst(content, attrVal string) string {
|
|
// 使用 html.Parse 解析 HTML 内容
|
|
doc, err := html.Parse(strings.NewReader(content))
|
|
if err != nil {
|
|
panic(exception.New(err.Error()))
|
|
}
|
|
// 递归函数来查找节点
|
|
var res string
|
|
var findProjectName func(*html.Node)
|
|
findProjectName = func(n *html.Node) {
|
|
// 查找标签为 input 的节点
|
|
if n.Type == html.ElementNode && n.Data == "input" {
|
|
for _, attr := range n.Attr {
|
|
if attr.Key == "name" && attr.Val == attrVal {
|
|
// 获取 value 属性的值作为 res
|
|
for _, attr := range n.Attr {
|
|
if attr.Key == "value" {
|
|
res = attr.Val
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 递归处理子节点
|
|
for c := n.FirstChild; c != nil; c = c.NextSibling {
|
|
findProjectName(c)
|
|
}
|
|
}
|
|
findProjectName(doc)
|
|
return res
|
|
}
|