使用正则表达式从给定的字符串中提取钥匙值对



我正在寻找一种方法(或正则态度),从给定的字符串中提取键值对及其值。例如:

var text = "<script src="a" integrity="b" crossorigin="c" exclude="d"><//script>";
var reg = '...';
var res = reg.exec(text);
Result: { 'src': 'a', 'integrity': 'b', 'crossdomain': 'c', 'exclude': 'd' }

请注意重要的事情:

  1. 与DOM无关。
  2. "文本"参数是纯文本,没有与DOM的任何连接。(我从服务器获得)。
  3. 这条文本根本不应该插入DOM。

您需要做的就是创建一个HTML元素,将字符串设置为InnerHTML并在其上使用标准DOM方法 - 随时随地仍然没有任何添加到DOM:p>

var el = document.createElement('html');
el.innerHTML = '<script src="a" integrity="b" crossorigin="c" exclude="d"><//script>';
console.log(el.getElementsByTagName('script')[0].attributes)

要获取属性名称和值,请使用以下内容(请注意下面使用ES6):

var el = document.createElement('html');
el.innerHTML = '<script src="a" integrity="b" crossorigin="c" exclude="d"><//script>';
var attrs = Array.from(el.getElementsByTagName('script')[0].attributes);
for (let attr of attrs) {
	console.log(attr.name + "=" + attr.value);
}

ES5等效是:

Array.prototype.forEach.call(el.getElementsByTagName('script')[0].attributes, function(e) {
    console.log(e.name + " = " + e.value);
});

要获取您要的对象,您可以使用以下内容:

var el = document.createElement('html');
el.innerHTML = '<script src="a" integrity="b" crossorigin="c" exclude="d"><//script>';
var obj = Array.from(el.getElementsByTagName('script')[0].attributes).reduce((a,b) => {
  a[b.name] = b.value;
  return a;
}, {});
console.log(obj);

要达到您的结果,我们可以首先用正则提取属性:

var text = '<script src="a" integrity="b" crossorigin="c" exclude="d"><//script>';
    var attributes = text.match(/b(w+)="(.*?)"/g);
    var result = {};
    attributes.forEach(attr => {
        attr.replace(/"/g,'') // Remove quotes from attributes
        var htmlAttribute = attr.split('=')[0];
        var htmlValue = attr.split('=')[1];
       result[htmlAttribute] = htmlValue;
    });
    
    console.log(result); // Your object with key:value

// remember the 'g' flag, otherwise ...
var r = /b(w+)s*=s*"(.*?)"/g;
var s = '<script src="a" integrity="b" crossorigin="c" exclude="d"><//script>';
var d = {};
// ...  this loop will run indefinitely!
var m = r.exec(s);
while (m) {
    d[m[1]] = m[2];
    m = r.exec(s);
}
d; // { src: "a", integrity: "b", crossorigin: "c", exclude: "d" }

最新更新