<DISTURBED>Open your eyes</DISTURBED><Field Two>See through the disguise</Field Two>
regular expression I'm using只给我最后的结果:
(<([\w\s?[^>]*)>([\w\s?]*)<\/[\w\s?[^>]*>)*
我需要将所有数据提取到键值对中。在这种情况下:
{"DISTURBED": "Open your eyes", "Field Two": "See through the disguise" }
另一种可能的输出可能是:
{"DISTURBED": "Open your eyes", "Field Two": "See through the disguise", "KeyNameX": "Value output Y" }
理论上支持任何#{1}}值。实际上,没有必要支持&gt;遵循这种模式的50个标签:
<tag name>inner content</tag name>
嵌套是非法的:
<tag>value</tag><tag2>value</tag2><tag3>...<tag50>content</tag50>
//没有
这不是HTML。您将看不到属性值。
答案 0 :(得分:3)
这个怎么样?
const re = /<([\w\s]+)>(.+?)<\/\1>/g
JavaScript的正则表达式支持反向引用。
然后你可以在匹配时循环:
const string = "<DISTURBED>Open your eyes</DISTURBED>...";
const tags = {};
for (let match; match = re.exec(string);) {
tags[match[1]] = match[2];
}
答案 1 :(得分:1)
您可以创建一个元素,使用0
,.innerHTML
,.tagName
,.textContent
来包含,将.replace()
字符替换为_
保留空间特征。
.tagName
答案 2 :(得分:0)
我遇到了很多问题,并决定抛出正则表达式的想法。我写了this而不是我称之为标记化器的东西:
var workingObject = {
content: "<DISTURBED>Open your eyes</DISTURBED><Field Two>See through the disguise</Field Two><Field Two three>See through the disguise</Field Two three><hi>asdf</hi>",
result: {}
}
function tokenizer(input){
var token;
var index = 0;
input.content = input.content.trim();
do{
token = input.content.substring(0,1);
input.content = input.content.substring(1, input.content.length);
var tagName = extract(input, '>');
var tagContent = extract(input, '<');
var discard = extract(input, '>');
//input.result['"' + tagName + '"'] = {tagContent, index};//optionally add index
input.result['"' + tagName + '"'] = tagContent;
index++;
}while(token = '<' && input.content != "");
console.log('final result: ', input.result);
}
function extract(input, delimiter){
var result = [];
var token;
do{
result.push(token);
token = input.content.substring(0,1);
input.content = input.content.substring(1, input.content.length);
}while(token != delimiter && input.content != "");
result = result.join("");
return result;
}
tokenizer(workingObject);
&#13;
它有点灵活,因为我不必担心像正则表达式那样的角色细节。即使使用意外格式,输入也会大部分处理。