0

我有一个类似的字符串

<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);

我得到:卷。9、我要:9

同样,我得到带有“问题”文本的问题编号:

var regEx = new RegExp("Issue\\s\\d+");
var regExVal = attributeVal.match(regEx);

我应该得到:30而不是:第 30 期

问题是我不能使用另一个正则表达式来获取所需的值,不能剥离/parseInt 等,并且模式必须能够在单个正则表达式中获取信息。

4

4 回答 4

1

要使用单个正则表达式获取所需的信息,您需要利用正则表达式分组:

var regEx = new RegExp("Issue\\s(\\d+)");
var regExVal = attributeVal.match(regEx)[1];

如果您无法修改正则表达式,您可以解析结果数字:

var number = "Issue 30".replace(/\D/g, '');
于 2012-11-30T13:55:21.207 回答
1

如果我理解正确,您不想对.match()调用返回的字符串值进行进一步解析,但如果它在一个语句中返回必要的值,则可以接受不同的正则表达式。

您的正则表达式需要一个捕获组()来检索所需的数字,并将它们放在数组索引中[](第一个索引[0]将保存整个匹配的字符串,随后的索引保存()捕获的子字符串)。

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"

这是在jsfiddle上

于 2012-11-30T13:59:34.650 回答
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

在这里测试一下。

于 2012-11-30T14:12:38.453 回答
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]);

有关更多详细信息:与 .MATCH() 一起使用的 JQUERY 正则表达式示例

于 2012-11-30T14:27:24.560 回答