-1

I have a string, from this I have to obtain a substring between two limit using jQuery. For Example, my string is

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>";

Now I need the value between <span class=\"fm-script fm-inline\" style=\"vertical-align: 0.7em;\"> and </span>.

Here it is 3. The value is dynamic. Also the string sel contain more than one <span class=\"fm-script fm-inline\" style=\"vertical-align: 0.7em;\"> and </span>. So i need all the value between these string.

How can I obtain this??

I tried something like this:

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

But this give the result between first(here only one) <span class=\"fm-script fm-inline\" style=\"vertical-align: 0.7em;\"> and last </span>.

Please check the fiddle for more details: FIDDLE

Here the desired output is 3. How can I achieve this? please help me..

Thank you..

mplungjan
  • 169,008
  • 28
  • 173
  • 236
Deepu Yes
  • 7
  • 1

2 Answers2

0

Why not render it and use jQuery to grab the span content using selectors? Running RegEx against HTML is considered a BAD THING

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>
Community
  • 1
  • 1
mplungjan
  • 169,008
  • 28
  • 173
  • 236
0

Regular expressions should do the trick:

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]);
}

Note: This assumes no other html tags exist within the spans.

ReallyMadeMeThink
  • 1,061
  • 7
  • 11