在jQuery中计算正则表达式匹配

时间:2011-03-12 01:49:45

标签: javascript jquery html css

我需要在使用load()函数加载的动态加载的<div>中计算一组正则表达式。我还需要将此<div>的大小调整为其中最长的字符行。有没有办法实现这个目标?我试过四处寻找,找不到任何东西,甚至连SO都找不到。我应该提一下我正在测试的表达式是:

Sat Mar 12 12:45:38 PST 2011

使用此正则表达式:

if ($('#result').text().match(/[A-Za-z]{3}\s[A-Za-z]{3}\s[0-9]{1,2}\s[0-9]{2}:[0-9]{2}:[0-9]{2}\s[A-Z]{3}\s[0-9]{4}/))

3 个答案:

答案 0 :(得分:5)

var str="The rain in SPAIN stays mainly in the plain"; 
var patt1=/ain/gi;  //noticed the g.  g will enable match of all occurance, and without it it'll only match the first occurance
console.log(str.match(patt1).length);  //4 matched

JavaScript match regex函数返回一个数组,因此您基本上可以在该数组上执行一个长度并获得匹配元素的大小。确保您使用RegEx中的g来搜索所有出现

根据您的RegEx,您可以执行以下操作:

$('#result').text().match(/[A-Za-z]{3}\s[A-Za-z]{3}\s[0-9]{1,2}\s[0-9]{2}:[0-9]{2}:[0-9]{2}\s[A-Z]{3}\s[0-9]{4}/g).length //this should give you the total count of occurance

答案 1 :(得分:1)

kjy112给了你答案。就像那个答案澄清一样,这不是真正的jQuery,而是Javascript RegEx(所以也许这就是放弃你的搜索)。

如果正则表达式变得缓慢 - 如果你返回许多日期可能会这么做 - 你可以算一些任意组件,例如几年:

$('#result').text().match(/\d{4}/).length

答案 2 :(得分:0)

Malfy,

想到了获得字符串宽度的3种方法。我会首先考虑那些,然后如何获得最长的长度。看起来其他人已经解决了正则表达式。

1) (fastest)

如果只有文本本身需要一定宽度而不是div,那么你可以使用white-space:nowrap来确保文本保持整个宽度。

$('div.someClass').css('whiteSpace','nowrap');




2) (slowest)

如果您需要字符串的像素宽度来设置另一个div的宽度,那么一种方法是创建一个包含该字符串的元素并使用上面的css属性。例如:

var yourString = 'your string';
// create a div containing your string
var $tempDiv = jQuery('<div style="visibility:hidden;position:absolute;white-space:nowrap">'+jQuery.trim(yourString)+'</div>').appendTo('body');
$newDiv = <your new div, however you're creating it>;
// set the width of the new div to the width of the temp div
$newDiv.width($tempDiv.width());
// and clean up;
$tempDiv.remove();
//repeat as necessary




3) (quite fast too)

或者,如果您确定要使用等宽字体(快递,慰问等)。有一个更快的方式。保存单个字符的宽度并将其乘以每个新文本字符串的长度。这样你每次都不会写新元素。例如:

var $tempDiv = $('<div style="visibility:hidden;margin:0;padding:0;border:0;">z</div>').appendTo('body');
//(any character will work. z is just for example); 
var reusableCharacterWidth=$tempDiv.width();
$tempDiv.remove();

var firstString = your string';
// set the width of your first div
$newDiv.width(reusableCharacterWidth*firstString.length);
var nextString = 'your next string';
// set the width of your next div
$nextNewDiv.width(reusableCharacterWidth*nextString.length);

(注意:您可能希望在字符串中使用$ .trim()以防万一)

获取最长的字符串:

var longestLineLength,
    yourText= 'your text here';
function getLongestLineLength(lines){
    var oneLineLength,
        longest=0,
        linesArray = lines.split('\n');
    for(var i=0,len=linesArray.length;i<len;i++){
        oneLineLength=linesArray[i].length;
        longest=oneLineLength>longest?oneLineLength:longest;
    }
  return longest;
}
longestLineLength = getLongestLineLength(yourText);

干杯!

亚当