我需要在使用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}/))
答案 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);
干杯!
亚当