之前我问了一个类似的问题并得到了正确的答复。这次虽然我宁愿尝试分别在'By'和'Date'之后获得名称的两个变量。
以下匹配的问题是,如果名称中有空格或短划线,则不会出现问题:
<p class="review-rating">
By carolyn.fleetwood
- Feb 11, 2012
-
Something.com
</p>
<p class="review-rating">
By Dont-work
- Feb 11, 2012
-
Something.com
</p>
<p class="review-rating">
By wont work
- Feb 11, 2012
-
Something.com
</p>
$('.review-rating').each(function() {
var matches = $(this).text().match(/\s*By\s+([\w.]+)\s*-\s*([\w, ]+)/);
alert("Date: " + matches[2] + " | By: " + matches[1]);
});
如上所述,它不会在“By”之后拿起破折号或空格。
见jfiddle:http://jsfiddle.net/GYSbR/1/
答案 0 :(得分:1)
假设该行的其余部分是他们的名字,只需从[\w.]
切换到[^\r\n]+
,这样就可以抓住剩下的内容直到下一个新行。
答案 1 :(得分:1)
答案可能只是使用点匹配器:这将匹配默认情况下除新行之外的所有内容。
.match(/\s*By\s+(.+)\s*-\s*([\w, ]+)/)
唯一需要注意的是,它可能会捕获“By”行上的一些尾随空格(如果有的话)。解决这个问题的方法之一:
.match(/\s*By\s+(.*\S)\s*-\s*([\w, ]+)/)
此处.*\S
大致翻译为“匹配以非空格结尾的一个或多个字符,没有新行”。