需要正则表达式来拉伸类值


Need regex to extrude class values

>我有这种代码

<div class="test"><a href="../toto"><i class="test toto">toto</i></a></div>
<div class="test"><a href="../titi"><i class="test titi">titi</i></a></div>
<div class="test"><a href="../tutu"><i class="test tutu">tutu</i></a></div>

请注意,类的内容是未知的,但我想在最后有一个数组,在这种情况下包含:

["test toto", "test titi", "test tutu"]

尝试

var j = $.map($("[class]"), function(val, key) {
  return $(val).find("[class]").attr("class")
});

var j = $.map($("[class]"), function(val, key) {
  return $(val).find("[class]").attr("class")
});
$("body").append(JSON.stringify(j, null, 4))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="test"><a href="../toto"><i class="test toto">toto</i></a></div>
<div class="test"><a href="../titi"><i class="test titi">titi</i></a></div>
<div class="test"><a href="../tutu"><i class="test tutu">tutu</i></a></div>

PHP 的一个更好的方法是使用 XPath:

$dom = new DOMDocument();
@$dom->loadHTML($yourhtml);
$xpath = new DOMXPath($dom);
$textNodeList = $xpath->query('//div[@class="test"]/a/i/@class');
foreach ($textNodeList as $textNode) {
    echo "'n" . $textNode->nodeValue;
}

注意:正如黑暗绝对的尼特所注意到的,如果div 标签有几个类,你可以用 contains() 替换等式,所以:

$textNodeList = $xpath->query('//div[contains(@class,"test")]/a/i/@class');
你可以

通过mapget来做到这一点

var arr = $('.test > a > i').map(function(){
    return this.className;
}).get();
console.log(arr);

试试这个正则表达式:

<i.+?class="(.+)"

javaScript Code:

var re = /<i.+?class="(.+)"/g;
var str = '<div class="test"><a href="../toto"><i class="test toto">toto</i></a></div>'n<div class="test"><a href="../titi"><i class="test titi">titi</i></a></div>'n<div class="test"><a href="../tutu"><i class="test tutu">tutu</i></a></div>';
var m;
while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}

Using jQuery map()

var arr = [];
$('.test a i').map(function(){
    arr.push(this.className);
});
console.log(arr);

使用 PHP 正则表达式

$pattern = '/<i class="test(.*)(">)/';
preg_match_all($pattern, $html, $m);
$arr = array_map(function($v){
    return "test " . $v;
}, $m[1]);
print '<pre>';
print_r($arr);
print '</pre>';

正则表达式演示