求助下 正则表达式 伸个手

2015-10-10 06:36:58 +08:00
 supman

<h2 class="a-text-normal">匹配我!</h2>

想问下 怎么匹配标签对里的文字呢?

2219 次点击
所在节点    问与答
21 条回复
supman
2015-10-10 07:15:16 +08:00
网页里面好多 h2 标签对 但是只匹配这个 class 的
freedomSky
2015-10-10 07:22:32 +08:00
<h2[^>]*class="[^"]*a-text-normal[^>]*>\([^<]*\)<
freedomSky
2015-10-10 07:23:17 +08:00
大概这么个意思,手机打的,没测试
vmebeh
2015-10-10 08:12:27 +08:00
<h2\sclass="a-text-normal">(.*)</h2>
linshuizhaoying
2015-10-10 08:30:24 +08:00
以前写过很渣的一个对 ajax 进行转换的东东, Bug 满天飞,但是最后勉强能用,我抄一段给你,你可以看下
function check_single(single){
/*
* Code by:Qian
* 描述:
* 第一遍粗略正则
* 将<div id=xxx class="xxx" xxx="xxx">AAAAAA... </div>
* 匹配成
* $1= div id=xxx class="xxx" xxx="xxx"
* $2 = AAAAAA...
* $3 = div
*/
var select_Regx = /\<\//g;
var regx;
//准备处理的数据
var pre_Data = single;
//判断是闭合标签还是单标签
var n = pre_Data.match(select_Regx) || [];
if(n.length == 1){
//闭合
regx=/\<(.*)*\>(.*)*(\<\/(.*)*\>)/i;
}else{
//单标签 img a 这类
regx=/\<(.*)*\>(.*)*(\<\/(.*)*\>)*/i;
}
var result=regx.exec(pre_Data);

one = result[1];
two = result[2];

if(two){//如果有 content 这个值
Content_stack.push(two);
}
//从$1 中提取标签,不取$1 作为标签是因为 img a 这些没有闭合标签

var regy=/(\b(.)*\b)\s/i;
var t = regy.exec(result[1]);

if(t){
three = result[1].substring(0,result[1].search('\\s'));
RegExp_One();
return getResult();
}else{
return getzero();
}
// alert(one);
// alert(two);
// alert(three);
}

这是 github 地址 https://github.com/linshuizhaoying/AjaxRegExp
我知道我水平渣=-=请不要打击我,尽量挑能夸的夸,谢谢
CheungKe
2015-10-10 09:24:29 +08:00
我也来个

<img src="xxx" ... id="xxx">

要求匹配出 id 的值

注: id 可能为空
popok
2015-10-10 09:35:31 +08:00
@vmebeh
要么改成这样:<h2\sclass="a-text-normal">(.*?)</h2>
要么:<h2\sclass="a-text-normal">([^<]*)</h2>
funsunz
2015-10-10 09:50:46 +08:00
<\s*h2[^>]+>([^<]+)<\/h2\s*>

测试:

```javascript
var patt = /<\s*h2[^>]+>([^<]+)<\/h2\s*>/;

var result = patt.exec('<h2 class="a-text-normal">匹配我!</h2>');
alert(result[1]);
```

http://jsfiddle.net/mneLoa5v/
Biwood
2015-10-10 09:53:07 +08:00
@CheungKe <img[^/>]*id=['"](.*)['"][^/>]*?/>
Biwood
2015-10-10 09:54:31 +08:00
@CheungKe 不好意思,刚刚写错了一点,应该是:<img[^/>]*id=['"](.*)['"][^/>]*?[/>]
funsunz
2015-10-10 09:55:33 +08:00
<\s*h2[^>]+class\s*=\s*"a\-text\-normal"[^>]*>([^<]+)<\/h2\s*>

```javascript

var patt = /<\s*h2[^>]+class\s*=\s*"a\-text\-normal"[^>]*>([^<]+)<\/h2\s*>/;

var result1 = patt.exec('<h2 class="a-text-normal">匹配我!</h2>');
alert(result1[1]);

var result2 = patt.exec('<h2 class="a-text-normal">test content</h2>');
alert(result2[1]);

```
http://jsfiddle.net/mneLoa5v/1/
supman
2015-10-10 10:55:44 +08:00
@freedomSky
@vmebeh
@linshuizhaoying
@CheungKe
@popok
@funsunz
@Biwood
@funsunz


谢谢 谢谢你们啦!!!!么~
vmebeh
2015-10-10 11:14:12 +08:00
@popok 非贪婪模式更好,谢谢补充
CheungKe
2015-10-10 11:45:21 +08:00
<img[^>]+src\s*=\s*['"]([^'"]+)['"][^>]+(?:id\s*=\s*['"]([^'"]+)['"])[^>]*>

我目前在用这个,但是 id 一定要存在。

如果 <img[^>]+src\s*=\s*['"]([^'"]+)['"][^>]+(?:id\s*=\s*['"]([^'"]+)['"]) ? [^>]*>

如果加上 ? ,能获取到 group 但是值是 null 。好象是 repeat group 的问题,不是了解
luoluoluo
2015-10-10 12:05:16 +08:00
You can't parse [X]HTML with regex.

http://stackoverflow.com/a/1732454/1099230
CheungKe
2015-10-10 13:15:37 +08:00
@luoluoluo 有一段文字,像
我们都是<img src="xx" id="xx">好学生
只有文字和图片组合而成的字符串,应该怎么顺序切分出来放到数组里面,需要提取 img id
Exin
2015-10-10 13:35:55 +08:00
@luoluoluo 弱弱问下有没有什么好的 parse HTML 的轮子
luoluoluo
2015-10-10 16:20:40 +08:00
longaiwp
2015-10-10 19:09:26 +08:00
最简单的方案不是 html 解析器?
CheungKe
2015-10-10 20:14:17 +08:00
@luoluoluo 用 dom 解析,如何得到以下两个数组

["我们", "<img src="xx" id="image_id1">","都是", "<img src="xx" id="image_id2">", "好学生"]
["image_id1", "image_id2"]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/226786

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX