我正式宣布自己是哑巴!我对regex很在行,但是javascript regex让我很紧张:
我有以下html字符串:
htmlString = '<div class="aa">TextOne</div><ul><li>one</li></ul>';我需要根据aa类div中的文本获取UL元素中的所有内容。
我尝试了以下几点:
textItem = 'TextOne';
ulRegex = new RegExp('<div class="aa">'+textItem+'</div><ul>(.*)</ul>', "igm");
ul = ulRegex.exec(htmlString);在写这个问题时,我在regex中发现了一个错误(一个很小的额外字符),这个错误不允许它匹配,但是对于所有寻找特定内容的人来说-- javascript /正则表达式/ html字符串/ html子字符串--它的工作正常。
编辑的
我很感谢对此添加的所有内容--但是还有一个额外的方面我正在使用regex --我正在匹配一个文本项,我首先要为regex模式通过一个变量。
溶液
在收到了一些提示和建议之后,我想出了以下可能对其他人也有帮助的建议:
htmlString = '<div class="aa">TextOne</div><ul><li>one</li></ul>';
textItem = 'TextOne';
tempdiv = $('<div/>');
tempdiv.html(htmlString);
ul = tempdiv.find('div.aa:contains('+textItem+')').next('ul');
$('#res').append(ul);http://jsfiddle.net/sdXpJ/
下一个ul很重要,因为它解决了关于嵌套ULs和其他基于regex的解决方案的问题,其中我无法匹配第一级UL (具有内部的一个或多个UL)。
发布于 2013-10-29 11:00:47
溶液
在收到了一些提示和建议之后,我想出了以下可能对其他人也有帮助的建议:
htmlString = '<div class="aa">TextOne</div><ul><li>one</li></ul>';
textItem = 'TextOne';
tempdiv = $('<div/>');
tempdiv.html(htmlString);
ul = tempdiv.find('div.aa:contains('+textItem+')').next('ul');
$('#res').append(ul);http://jsfiddle.net/sdXpJ/
"next ul“很重要,因为这解决了关于嵌套ULs和其他基于regex的解决方案的问题,在这些解决方案中,我无法匹配第一级UL (具有内部一个或多个UL)。
发布于 2013-10-28 14:16:51
为此,您可以使用一个简单的indexOf方法:
function str_between(str, searchStart, searchEnd, caseSensitive, offset) {
var fullString = str;
caseSensitive = caseSensitive || false;
offset = offset || 0;
if (!caseSensitive) {
fullString = fullString.toLowerCase();
searchStart = searchStart.toLowerCase();
searchEnd = searchEnd.toLowerCase();
}
var startPosition = fullString.indexOf(searchStart, offset);
if (startPosition > -1) {
var endPosition = fullString.indexOf(searchEnd, startPosition + 1);
if (endPosition > -1) {
return str.substr(startPosition + searchStart.length, endPosition - startPosition - searchEnd.length + 1);
}
}
return false;
}> var htmlString = '<div class="aa">TextOne</div><ul><li>one</li></ul>';
> str_between(htmlString, '<ul>', '</ul>');
"<li>one</li>"
> str_between(htmlString, '<UL>', '</UL>');
"<li>one</li>"
> str_between(htmlString, '<UL>', '</UL>', true);
falsehttps://stackoverflow.com/questions/19636867
复制相似问题