从javascript中的html字符串中获取子字符串

时间:2013-10-28 14:04:31

标签: javascript html regex string substring

我正式宣布自己是愚蠢的!我对正则表达式很好,但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);

http://jsfiddle.net/sdXpJ/

下一个ul非常重要,因为它解决了有关嵌套UL和任何其他基于正则表达式的解决方案的问题,其中我无法匹配第一级UL(具有内部一个或多个Uls)。

2 个答案:

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

http://jsfiddle.net/sdXpJ/

“下一个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