首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从javascript中的html字符串获取子字符串

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

Stack Overflow用户
提问于 2013-10-28 14:04:30
回答 2查看 1.8K关注 0票数 2

我正式宣布自己是哑巴!我对regex很在行,但是javascript regex让我很紧张:

我有以下html字符串:

代码语言:javascript
运行
复制
htmlString = '<div class="aa">TextOne</div><ul><li>one</li></ul>';

我需要根据aa类div中的文本获取UL元素中的所有内容。

我尝试了以下几点:

代码语言:javascript
运行
复制
textItem = 'TextOne';

ulRegex = new RegExp('<div class="aa">'+textItem+'</div><ul>(.*)</ul>', "igm");
ul = ulRegex.exec(htmlString);

在写这个问题时,我在regex中发现了一个错误(一个很小的额外字符),这个错误不允许它匹配,但是对于所有寻找特定内容的人来说-- javascript /正则表达式/ html字符串/ html子字符串--它的工作正常。

编辑的

我很感谢对此添加的所有内容--但是还有一个额外的方面我正在使用regex --我正在匹配一个文本项,我首先要为regex模式通过一个变量。

溶液

在收到了一些提示和建议之后,我想出了以下可能对其他人也有帮助的建议:

代码语言:javascript
运行
复制
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)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-29 11:00:47

溶液

在收到了一些提示和建议之后,我想出了以下可能对其他人也有帮助的建议:

代码语言:javascript
运行
复制
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)。

票数 1
EN

Stack Overflow用户

发布于 2013-10-28 14:16:51

为此,您可以使用一个简单的indexOf方法:

代码语言:javascript
运行
复制
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;
}

代码语言:javascript
运行
复制
> 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19636867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档