javascript正则表达式修剪为“空格”和“破折号”或匹配

时间:2012-02-29 02:31:52

标签: javascript regex match trim

之前我问了一个类似的问题并得到了正确的答复。这次虽然我宁愿尝试分别在'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/

2 个答案:

答案 0 :(得分:1)

假设该行的其余部分是他们的名字,只需从[\w.]切换到[^\r\n]+,这样就可以抓住剩下的内容直到下一个新行。

答案 1 :(得分:1)

答案可能只是使用点匹配器:这将匹配默认情况下除新行之外的所有内容。

.match(/\s*By\s+(.+)\s*-\s*([\w, ]+)/)

唯一需要注意的是,它可能会捕获“By”行上的一些尾随空格(如果有的话)。解决这个问题的方法之一:

.match(/\s*By\s+(.*\S)\s*-\s*([\w, ]+)/)

此处.*\S大致翻译为“匹配以非空格结尾的一个或多个字符,没有新行”。