两个限制之间的子字符串使用 jQuery

substring between two limit using jQuery

本文关键字:字符串 jQuery 之间 两个      更新时间:2023-09-26

我有一个字符串,从中我必须使用jQuery获取两个限制之间的子字符串。例如,我的字符串是

var sel = "x<span class='"fm-script fm-inline'" style='"vertical-align: 1.33em;'"><span style='"vertical-align: 0em;'"><span class='"fm-vert fm-frac'">1/2</span></span></span>+y<span class='"fm-script fm-inline'" style='"vertical-align: 0.7em;'">3</span>+z<span class='"fm-script fm-inline'" style='"vertical-align: 1.33em;'"><span style='"vertical-align: 0em;'"><span class='"fm-vert fm-frac'">2/3</span></span></span>";

现在我需要 <span class='"fm-script fm-inline'" style='"vertical-align: 0.7em;'"></span> 之间的值。

这里是 3。该值是动态的。此外,字符串sel包含多个<span class='"fm-script fm-inline'" style='"vertical-align: 0.7em;'"></span>。所以我需要这些字符串之间的所有值。

我怎样才能获得这个??

我尝试了这样的事情:

var item = sel.match("<span class='"fm-script fm-inline'" style='"vertical-align: 0.7em;'">(.*)</span>");

但这给出了第一个(这里只有一个(<span class='"fm-script fm-inline'" style='"vertical-align: 0.7em;'">和最后一个</span>之间的结果。

请查看小提琴

了解更多详情:小提琴

此处所需的输出为 3。我怎样才能做到这一点?请帮助我..

谢谢。。

为什么不渲染它并使用jQuery使用选择器获取跨度内容呢?针对HTML运行正则表达式被认为是一件坏事

var getTextNodesIn = function(el) {
    return $(el).find(":not(iframe)").addBack().contents().filter(function() {
        return this.nodeType == 3;
    });
};
$(function() {
     var sel = "x<span class='"fm-script fm-inline'" style='"vertical-align: 1.33em;'"><span style='"vertical-align: 0em;'"><span class='"fm-vert fm-frac'">1/2</span></span></span>+y<span class='"fm-script fm-inline'" style='"vertical-align: 0.7em;'">3</span>+z<span class='"fm-script fm-inline'" style='"vertical-align: 1.33em;'"><span style='"vertical-align: 0em;'"><span class='"fm-vert fm-frac'">2/3</span></span></span>";
     
     var $myDiv = $("<div/>"),vals=[];
     $myDiv.append(sel.replace(/''"/g,'"'));  
     var $nodes = getTextNodesIn($myDiv);    
     $nodes.each(function() {
         vals.push($(this).text());
     });
     alert(vals.join("'n"));
 });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

正则表达式应该可以解决问题:

var regex = new RegExp("<span class='"fm-script fm-inline'" style='"vertical-align: 0.7em;'">([^<]*)</span>","g");
var match = null;
while(match = regex.exec(sel)){
    console.log(match[1]);
}

注意:这假设跨度内不存在其他 html 标记。