javascript正则表达式修剪到';空间';和';破折号';或匹配
我以前也问过类似的问题,得到了正确的回答。不过这次我宁愿尝试在“By”和“Date”后面分别为名称获取两个变量 以下匹配的问题在于,如果名称中有空格或破折号,则无法识别:javascript正则表达式修剪到';空间';和';破折号';或匹配,javascript,regex,match,trim,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 -
<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]);
});
卡罗琳·弗利特伍德
-2012年2月11日
-
Something.com
不工作
-2012年2月11日
-
Something.com
这是行不通的
-2012年2月11日
-
Something.com
$('.review rating')。每个(函数(){
var matches=$(this).text().match(/\s*By\s+([\w.]+)\s*-\s*([\w,]+)/);
警报(“日期:+匹配项[2]+”|由:“+匹配项[1]);
});
在上面,它不会拾取破折号或“By”后面的空格
请看这里jfiddle:假设行的其余部分是它们的名称,只需从
[\w.]
切换到[^\r\n]+
,这样它就可以捕捉到下一行之前的其余内容。答案可能只是使用点匹配器:在默认情况下,它匹配除新行以外的所有内容
.match(/\s*By\s+(.+)\s*-\s*([\w, ]+)/)
唯一需要注意的是,它可能会捕获“By”行上的一些尾随空格(如果有)。一种方法是:
.match(/\s*By\s+(.*\S)\s*-\s*([\w, ]+)/)
这里的
*\S
大致翻译为“匹配以非空格结尾的一个或多个字符,没有新行”。我知道这很简单,谢谢。我在找“下一行”,这就成功了。又一次打嗝。如果没有“By”这个词,有没有办法为名称返回NULL、zero或任何东西?如果单词“By”不存在(又称为match[2]),我只想提取日期,如果它不包含“By”?将其打包(?:By\s+)
然后它尝试通过\s+匹配,否则会忽略它。我注意到这会将日期字段放在匹配中[1]现在请参见此处:稍微更改组以包含匹配:(?:By\s+([^\r\n]+)|.*)
这会给您一个名称或未定义的。那可以接受吗?