我正在寻找一种方法(或正则表达式模式)从给定字符串中提取键值对属性及其值。 e.g:
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' }
请注意重要事项:
答案 0 :(得分:2)
你需要做的就是创建一个html元素,将你的字符串设置为innerHTML并在其上使用标准DOM方法 - 在任何时候都没有添加到DOM中:
var el = document.createElement('html');
el.innerHTML = '<script src="a" integrity="b" crossorigin="c" exclude="d"><//script>';
console.log(el.getElementsByTagName('script')[0].attributes)
&#13;
要获取属性名称和值,请使用以下内容(请注意,下面使用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);
}
&#13;
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);
&#13;
答案 1 :(得分:1)
为了达到你的结果,我们可以先用正则表达式提取属性:
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
&#13;
答案 2 :(得分:0)
@FrenchMajesty无需拆分/删除,你也可以使用原始正则表达式:
// 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" }