我有困难的时候创建的正则表达式和JavaScript代码来计算这种模式的出现次数:正则表达式匹配字符串通配符
<tr><td align=right>*</td><td align=right>*</td><td><a href="*">*</a></td></tr>
其中为*是野生的。
我该如何去寻找?
我有困难的时候创建的正则表达式和JavaScript代码来计算这种模式的出现次数:正则表达式匹配字符串通配符
<tr><td align=right>*</td><td align=right>*</td><td><a href="*">*</a></td></tr>
其中为*是野生的。
我该如何去寻找?
可以扩大战果,这将匹配任何标签内容:
(?:.*?\>([^\<\>]+)\<)
而本作中的href匹配:
href\s*=\s*(["']).*?\1
如果你想要做的就是那数出现次数整个模式,你可以尝试:
// basically, numMatches = myString.match(/regexhere/ig).length;
numMatches = mystring.match(/<tr><td align=right>[\s\S]*?<\/td><td align=right>[\s\S]*?<\/td><td><a href="[^"]+">[\s\S]*?</a><\/td><\/tr>/ig).length;
正则表达式是上面的字符串,除了:
*
变成[\s\S]*?
。通常,我会替换为.*?
,但是在正则表达式.
中匹配所有内容,除了换行符。所以,如果你的字符串跨越多行,它将不匹配。解决此问题的常用方法是使用允许.
与新行匹配的“dotall”正则表达式修饰符,但JavaScript不支持此功能(?!)。在这种情况下,[\s\S]
是一种替代方案。/
,因为我使用/
作为我的javascript的正则表达式分隔符。注 - 如果您想匹配标签可能分成多行的位置,例如:
<tr>
<td align=right>randomstuffhere</td>
<td><a href="http://somelink">someotherstuff</a></td>
</tr>
然后改变正则表达式,从而有充分的标签,这将允许之间的空白之间的\s*
。即:
numMatches = mystring.match(/<tr>\s*<td align=right>[\s\S]*?<\/td>\s*<td align=right>[\s\S]*?<\/td>\s*<td>\s*<a href="[^"]+">[\s\S]*?</a>\s*<\/td>\s*<\/tr>/ig).length;
jQuery的方式(可能不是有效的),
var count = 0;
$('td[align=right],a[href=*]').each(function(){
if($(this).html() == '*'){
count++;
}
})
console.log(count);
乐趣用jQuery:
var $matches = $('td[align=right] ~ td[align=right] ~ td > a')
$matches.length // the number of matches
$matches.attr('href') // the value of the anchor's `href` attribute
$matches.parent().prev().text() // the preceding cell's text
$matches.parent().prev().prev().text()
没有,整个字符串,其中当每个*是一个通配符(可以是什么) – willium
把正则表达式搁置一会儿,你究竟想要达到什么目的? (正则表达式可能不是最好的方法:当然[这不是很好的解析HTML](http://stackoverflow.com/a/1732454/615754)。)你是说你已经在一个字符串中有HTML标记吗? – nnnnnn