JavaScript正则表达式和截取“破折号”后面的内容

3

对于下面的html,我试图把一个变量放到 "oakbarrels" 中,另一个变量放到 "Dec 25, 2011" 中。我已经能够通过正则表达式得到 "Dec 25, 2011",但我无法弄清如何得到其余部分。基本上,我想删除 "By " 和第一个" -"之后的所有内容:

<p class="review-rating">
         By oakbarrels
         - Dec 25, 2011
         -
         Something.com
</p>
<script>
    var thedate =  $('.review-rating').text().match(/\-\s([^\n]+)/)[1].trim();
    var from = ???
</script>

这更像是一个JavaScript问题,而不是jQuery问题。jQuery没有正则表达式引擎。 - Felix Kling
同意,我已经更新了,谢谢。 - ToddN
3个回答

3
var matches = $('.review-rating').text().match(/\s*By\s+(\w+)\s*-\s*([\w, ]+)/);

jsFiddle.

matches[1]将包含'oakbarrels',而matches[2]将包含'Dec 25, 2011',与您的示例相符。

我还将您的html()更改为text()。看起来HTML与匹配文本无关。


仍然存在一个小问题:http://jsfiddle.net/AQXNQ/1/ 尝试在多个p标签上实现,有什么想法吗? - ToddN
1
@ToddN 正则表达式需要捕获更多内容,而不仅仅是\w请查看 - alex
太棒了,这就做到了。我只需要使用\w来匹配多个<p>标签。 - ToddN
仍然存在一个关于“By”的短划线问题,请参见此处:http://jsfiddle.net/AQXNQ/2/ - ToddN
@ToddN 只需将这些字符添加到您的字符类中即可。 - alex

1

先分割字符串。你甚至不需要正则表达式:

var parts = $('.review-rating').text().split('-');
var date  = $.trim(parts[1])
var from  = $.trim(parts[0]).substring(3);

这里有一个演示。


0

你需要匹配多行。

var text = $('.review-rating').text();
var matches = text.match(/(.+?)-\s*(.+?)(?:\n|\A)/m);
//matches[1] = oakberrels
//matches[2] = Dec 25, 2011

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接