正则表达式将字符串的一部分取为数字

时间:2012-11-30 13:49:05

标签: javascript jquery regex jquery-selectors

我有一个类似

的字符串
<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等,并且模式必须能够在单个正则表达式中获取信息。

4 个答案:

答案 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"

Here it is on jsfiddle

答案 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]);

有关详细信息:JQUERY REGEX EXAMPLES TO USE WITH .MATCH()