如何写这样一个过滤字符串的正则?

发布于 2021-11-30 10:54:05 字数 410 浏览 847 评论 6

57< img src="/dev-build/5c1800f8cea587969777d0e2a11ec895.png" class="face-pic" data-labface="4">fd< img src="/dev-build/1157a424588a6732a95ac1d622e129d0.png" class="face-pic" data-labface="17">12< img src="/dev-build/bc2e80fa39a2f7d95737fdbec02c0b27.png" class="face-pic" data-labface="21">比比

这里有这样一个字符串,我想取出文字内容和图片上面的data-labface的属性,按照顺序组成一个数组,

这是一段,用户自行输入的文本内容。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

柳絮泡泡 2021-12-02 12:32:32

js代码:

console.log('57< img src="/dev-build/5c1800f8cea587969777d0e2a11ec895.png" class="face-pic" data-labface="4">fd< img src="/dev-build/1157a424588a6732a95ac1d622e129d0.png" class="face-pic" data-labface="17">12< img src="/dev-build/bc2e80fa39a2f7d95737fdbec02c0b27.png" class="face-pic" data-labface="21">比比'.match(/data-labface="[0-9]+"/gi));

自己根据情况改正则,这里只匹配了数字,大小写不敏感

/data-labface="[0-9]+"/gi

皇甫轩 2021-12-02 12:32:18

今儿个心情好,做一下活雷锋
JavaScript:
====================
var myregexp = /src="([^"]+)" class="face-pic" data-labface="(d+)"/img;
var match = myregexp.exec(subject);
while (match != null) {
 for (var i = 0; i < match.length; i++) {
  // matched text: match[i]
 }
 match = myregexp.exec(subject);
}

Java:
====================

try {
 Pattern regex = Pattern.compile("src="([^"]+)" class="face-pic" data-labface="(\d+)"", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.MULTILINE);
 Matcher regexMatcher = regex.matcher(subjectString);
 while (regexMatcher.find()) {
  for (int i = 1; i <= regexMatcher.groupCount(); i++) {
   // matched text: regexMatcher.group(i)
   // match start: regexMatcher.start(i)
   // match end: regexMatcher.end(i)
  }
 }
} catch (PatternSyntaxException ex) {
 // Syntax error in the regular expression
}

php

=================

preg_match_all('/src="([^"]+)" class="face-pic" data-labface="(d+)"/im', $subject, $result, PREG_SET_ORDER);
for ($matchi = 0; $matchi < count($result); $matchi++) {
 for ($backrefi = 0; $backrefi < count($result[$matchi]); $backrefi++) {
  # Matched text = $result[$matchi][$backrefi];
 }
}

混吃等死 2021-12-02 12:28:55

这个是用户输入的一段文本,里面包括文字内容和表情,图片就是表情,我想取出的是 文本内容 和 表情符号中的data-labface属性的值, 例如 ['57', '4', 'fd', '17', '12', '21', '比比']

命硬 2021-12-02 00:23:21

空格是我黏贴进去的时候产生的,可以忽略。。。

緦唸λ蓇 2021-12-01 01:33:00

哇瑟,我测试了下是我要的结果呢,谢谢这位大神。。。。

悟红尘 2021-11-30 12:50:16

问一下:

这个确实是用户输入的字符串吗? 还是用户输入内容的html源码?

个人觉得既然是js里面做, 可以考虑下面方式:

var srcStr = '57< img src="/dev-build/5c1800f8cea587969777d0e2a11ec895.png" class="face-pic" data-labface="4">fd< img src="/dev-build/1157a424588a6732a95ac1d622e129d0.png" class="face-pic" data-labface="17">12< img src="/dev-build/bc2e80fa39a2f7d95737fdbec02c0b27.png" class="face-pic" data-labface="21">比比'
	// "<"和"img"之间有个空格, 这不是合法的html.
	.replace(/< img/g, '<img')
// 解析为dom
,domParser = new DOMParser()
,doc = domParser.parseFromString(srcStr, 'text/html')
,nodes = Array.prototype.slice.call(doc.body.childNodes)
// 过滤只取文本和img节点, 然后取出文本内容和img的data-labface属性
,resArr = nodes.filter(function(node) {
	return node.nodeType==3 || node.tagName=='IMG'
}).map(function(node) {
	return node.nodeType==3 ? node.nodeValue : node.getAttribute('data-labface')
})
console.log(resArr)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文