How to get html tag attribute values using JavaScript Regular Expressions?

匿名 (未验证) 提交于 2019-12-03 07:36:14

问题:

Suppose I have this HTML in a string:

<meta http-equiv="Set-Cookie" content="COOKIE1_VALUE_HERE"> <meta http-equiv="Set-Cookie" content="COOKIE2_VALUE_HERE"> <meta http-equiv="Set-Cookie" content="COOKIE3_VALUE_HERE">

And I have this regular expression, to get the values inside the content attributes:

/<meta http-equiv=[\"']?set-cookie[\"']? content=[\"'](.*)[\"'].*>/ig

How do I, in JavaScript, get all three content values?

I've tried:

var setCookieMetaRegExp = /<meta http-equiv=[\"']?set-cookie[\"']? content=[\"'](.*)[\"'].*>/ig; var match = setCookieMetaRegExp.exec(htmlstring);

but match doesn't contain the values I need. Help?

Note: the regular expression is already correct (see here). I just need to match it to the string. Note: I'm using NodeJS

回答1:

You were so close! All that needs to be done now is a simple loop:

var htmlString = '<meta http-equiv="Set-Cookie" content="COOKIE1_VALUE_HERE">\n'+ '<meta http-equiv="Set-Cookie" content="COOKIE2_VALUE_HERE">\n'+ '<meta http-equiv="Set-Cookie" content="COOKIE3_VALUE_HERE">\n';  var setCookieMetaRegExp = /<meta http-equiv=[\"']?set-cookie[\"']? content=[\"'](.*)[\"'].*>/ig;  var matches = []; while (setCookieMetaRegExp.exec(htmlString)) {   matches.push(RegExp.$1); }  //contains all cookie values console.log(matches);

JSBIN: http://jsbin.com/OpepUjeW/1/edit?js,console



回答2:

Keep it simple:

/content=\"(.*?)\">/gi

demo: http://regex101.com/r/dF9cD8

Update (based on your comment):

/<meta http-equiv=\"Set-Cookie\" content=\"(.*?)\">/gi

runs only on this exact string. Demo: http://regex101.com/r/pT0fC2

You really need the (.*?) with the question mark, or the regex will keep going until the last > it finds (or newline). The ? makes the search stop at the first " (you can change this to [\"'] if you want to match either single or double quote).



回答3:

no need for regular expressions just do some dom work

var head = document.createElement("head"); head.innerHTML = '<meta http-equiv="Set-Cookie" content="COOKIE1_VALUE_HERE"><meta http-equiv="Set-Cookie" content="COOKIE2_VALUE_HERE"><meta http-equiv="Set-Cookie" content="COOKIE3_VALUE_HERE">';  var metaNodes = head.childNodes; for(var i=0; i<metaNodes.length; i++){    var contentValue = metaNodes[i].attributes.getNamedItem("content").value; }

As you are using nodejs and BlackSheep mentions using cheerio you could use their syntax if you wish to use that lib:

//Assume htmlString contains the html var cheerio = require('cheerio'), $ = cheerio.load(htmlString); var values=[]; $("meta").each(function(i, elem) {   values[i] = $(this).attr("content"); });


回答4:

try this:

var setCookieMetaRegExp = "/<meta http-equiv=[\"']?set-cookie[\"']? content=[\"'](.*)[\"'].*>/ig"; var match = stringToFindPartFrom.match(setCookieMetaRegExp);


回答5:

Try this:

var myString = '<meta http-equiv="Set-Cookie" content="COOKIE2_VALUE_HERE">'; var myRegexp = /<meta http-equiv=[\"']?set-cookie[\"']? content=[\"'](.*)[\"'].*>/ig; var match = myRegexp.exec(myString); alert(match[1]); // should show you the part


回答6:

Try this

(?:class|href)([\s='"./]+)([\w-./?=&\\#"]+)((['#\\&?=/".\w\d]+|[\w)('-."\s]+)['"]|)

example :

function getTagAttribute(tag, attribute){         var regKey = '(?:' + attribute + ')([\\s=\'"./]+)([\\w-./?=\\#"]+)(([\'#\\&?=/".\\w\\d]+|[\\w)(\'-."\\s]+)[\'"]|)'     var regExp = new RegExp(regKey,'g');     var regResult = regExp.exec(tag);        if(regResult && regResult.length>0){                                 var splitKey = '(?:(' + attribute + ')+(|\\s)+([=])+(|\\s|[\'"])+)|(?:([\\s\'"]+)$)'                         return regResult[0].replace(new RegExp(splitKey,'g'),'');     }else{         return '';     } }   getTagAttribute('<a href  =   "./test.html#bir/deneme/?k=1&v=1"    class=   "xyz_bir-ahmet abc">','href');'  //return  "./test.html#bir/deneme/?k=1&v=1"

Live Regexp101

Live JS Script Example



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!