我有一个类似
的字符串<dt>Source:</dt>
<dd>
Emergence: Title; 2005, Vol. 9 Issue 30, p120-203, 12p
</dd>
现在我是一个正则表达式,为它获取不同的值,即:音量,问题,日期等 所以,我使用以下方式获取整个文本:
var attr = jQuery("dl dt:contains('Source:') ~ dd:eq(0)").text();
使用正则表达式获取不同的值,例如:
要获取我使用的起始页面,请使用正则表达式:
var regex = new RegExp("p\\d+(?=[-\\s]{1})");
var regexValPS = attr.match(regex);
返回值:p120,预期:120
同样,要获取音量信息,我使用以下,正则表达式:
var regexVol = new RegExp("Vol.\\s\\d+");
var regexValVol = attributeVal.match(regexVol);
我得到: Vol。 9 ,我想: 9
同样地,我收到带有“问题”文本的问题编号:
var regEx = new RegExp("Issue\\s\\d+");
var regExVal = attributeVal.match(regEx);
我应该得到: 30 而不是:第30期
问题是我不能使用另一个正则表达式来获取所需的值,不能剥离/解析Int等,并且模式必须能够在单个正则表达式中获取信息。
答案 0 :(得分:1)
要使用单个正则表达式获取所需信息,您需要利用正则表达式分组:
var regEx = new RegExp("Issue\\s(\\d+)");
var regExVal = attributeVal.match(regEx)[1];
如果您无法修改正则表达式,您可以解析结果数字:
var number = "Issue 30".replace(/\D/g, '');
答案 1 :(得分:1)
如果我理解正确,您不希望对.match()
调用返回的字符串值进行进一步解析,但如果它在一个语句中返回必要的值,则可以接受不同的正则表达式。
您的正则表达式需要一个捕获组()
来检索所需的数字,并将它们放在数组索引[]
中(第一个索引[0]
将保存整个匹配的字符串,然后indices包含()
捕获的子串。)
在这种情况下,您可以使用更简单的new RegExp()
正则表达式文字而不是/pattern/
,并且可以在所有情况下在单个语句中提取所需的值。
var yourString = '<dt>Source:</dt>\
<dd>\
Emergence: Title; 2005, Vol. 9 Issue 30, p120-203, 12p\
</dd>';
// Match the page, captured in index [1]
yourString.match(/p(\d+)(?=[-\s]{1})/)[1];
// "120"
// Match the Vol captured in index [1]
yourString.match(/Vol\.\s(\d+)/)[1];
// "9"
// Match the issue captured in index [1]
yourString.match(/Issue\s(\d+)/)[1];
// "30"
答案 2 :(得分:1)
使用分组(...)
并阅读其匹配»
var str = "Emergence: Title; 2005, Vol. 9 Issue 30, p120-203, 12p";
var re = /p(\d+)(?=[\-\s])/;
document.writeln(re.exec(str)[1]); // prints: 120
re = /Vol\.\s(\d+)/;
document.writeln(re.exec(str)[1]); // prints: 9
测试here。
答案 3 :(得分:0)
试试这个:
var attr = jQuery("dt:contains('Source:') ~ dd:eq(0)").text();
console.log(attr);
console.log(attr.match(/p(\d+)(?=[-\s]{1})/)[1]);
console.log(attr.match(/Vol\.\s(\d+)/)[1]);
console.log(attr.match(/Issue\s(\d+)/)[1]);