我正式宣布自己是愚蠢的!我对正则表达式很好,但javascript正则表达式让我很紧张:
我有以下html字符串:
htmlString = '<div class="aa">TextOne</div><ul><li>one</li></ul>';
我需要根据aa class div中的文本获取UL元素中的所有内容。
我尝试了以下内容:
textItem = 'TextOne';
ulRegex = new RegExp('<div class="aa">'+textItem+'</div><ul>(.*)</ul>', "igm");
ul = ulRegex.exec(htmlString);
在写这个问题时,我发现我的正则表达式中的一个错误(一个小额外的字符)不能让它匹配但是对于所有那些寻找特定的东西 - javascript /正则表达式/ html字符串/ html子字符串 - 它的工作正常
被修改
我很感谢所有这些的补充 - 但是还有一个额外的方面我正在使用正则表达式 - 因为我正在匹配一个文本项目,我正在通过变量首先获得正则表达式模式。
解决方案
在收到一些提示和建议之后,我想出了以下内容,这也可以帮助其他人:
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);
下一个ul非常重要,因为它解决了有关嵌套UL和任何其他基于正则表达式的解决方案的问题,其中我无法匹配第一级UL(具有内部一个或多个Uls)。
答案 0 :(得分:1)
<强>解决方案强>
在收到一些提示和建议之后,我想出了以下内容,这也可以帮助其他人:
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);
“下一个ul”很重要,因为它解决了嵌套UL和任何其他基于正则表达式的解决方案的问题,我无法匹配第一级UL(内部有一个或多个Uls)。
答案 1 :(得分:0)
您可以使用简单的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);
false