我有一个变量持有单行字符串,这是像这样的html元素。
var des = "<p> --Sometext before-- FI: This is fi name, This is fi manufacturer <br /> SE:This is se name, This is se manufacturer <br /> EN: This is en name, This is en manufacturer</p>";
我想在FI之后选择所有内容:直到逗号签到一个变量并且在逗号后直到将标签转换为另一个变量。也适用于SE:和EN :.
例如,结果将是这样的。
var fi_name = "This is fi name";
var fi_manufacturer = "This is fi manufacturer";
var se_name = "This is se name";
var se_manufacturer = "This is se manufacturer";
var en_name = "This is en name";
var en_manufacturer = "This is en manufacturer";
请注意,字符串会动态更改但仍具有相同的模式。
例如:
<p> --Sometext before-- FI:[name],[manufacturer]<br/ >SE:[name],[manufacturer]<br/ >FI:[name],[manufacturer]</p>
您可以在JsFiddle中查看演示。
现在它抛出了空错误。
编辑v v v
它不适用于实时网站。 des变量完全如下所示。 请参阅http://jsfiddle.net/AM8X2/它再次抛出null。
答案 0 :(得分:2)
您可以查找指定的模式并从中提取相关信息:
var des = "<p>FI: This is fi name, This is fi manufacturer <br /> SE:This is se name, This is se manufacturer <br /> EN: This is en name, This is en manufacturer</p>";
var f = function(w, s) {
return new RegExp(w + ':([^,]+)').exec(s)[1];
}
fi = f('FI', des);
se = f('SE', des);
en = f('EN', des);
w + ':([^,]+)'
可以解释为:在w
s
的冒号后面找到值
这是更新后的fiddle。
更完整的解决方案,处理所有HTML标记的解决方案如下:
var f = function(w, s) {
var el = document.createElement('div'), arr;
el.innerHTML = s;
arr = (new RegExp(w + ':([^\n]+)').exec(el.innerText)[1]).split(',');
return {
manufacturer: arr[1],
name: arr[0]
}
}
fi = JSON.stringify(f('FI', des));
se = JSON.stringify(f('SE', des));
en = JSON.stringify(f('EN', des));
这个小提琴是here
要访问变量中的任何一个(没有JSON.stringify()
,直接方法返回,即f('SE', des)
),您可以这样做:
// for fi manufacturer
fi.manufacturer
// for en name
en.name
// etc..
在我看来,通过使用它,你有一个更加模块化的方法,并且错误的可能性更小。
答案 1 :(得分:1)
这是一个可能的解决方案:
var des = "<p> --Sometext before-- FI: This is fi name, This is fi manufacturer <br /> SE:This is se name, This is se manufacturer <br /> EN: This is en name, This is en manufacturer</p>";
var matches = des.match( /([A-Z]{2}):\s*([^,]+?)\s*,\s*([^<$]+?)\s*(?=<|$)/g );
var results = [];
for ( var i = 0; i < matches.length; i++ ) {
var res = matches[ i ].match( /([A-Z]{2}):\s*([^,]+?)\s*,\s*([^<$]+?)\s*(?=<|$)/ );
var abbr = res[ 1 ].toLowerCase();
results[ abbr + '_name' ] = res[ 2 ];
results[ abbr + '_manufacturer' ] = res[ 3 ];
}
console.log( results );
在这个小提琴中试试:http://jsfiddle.net/bukfixart/QB5qu/
答案 2 :(得分:1)
我将你的jsFiddle改为:
http://jsfiddle.net/11684/raPDd/4/
我在正则表达式中添加了大写字母和空格以及逗号,因此它不会返回null(因为找不到匹配项),其余的都没问题。
结果:
var fi,se,en;
var des = "<p>FI: This is fi name, This is fi manufacturer <br /> SE:This is se name, This is se manufacturer <br /> EN: This is en name, This is en manufacturer</p>";
var match = des.match(/<p>FI:([a-zA-Z ,]+)<br \/> SE:([a-zA-Z ,]+)<br \/> EN:([a-zA-Z ,]+)<\/p>/);
fi = match[1];
se = match[2];
en = match[3];
alert("[FI]: " + fi + "\n[SE]:" + se + "\n[EN]:" + en);
修改强>
我没有看到你在单独的变量中需要名称和制造商,我编辑了小提琴:http://jsfiddle.net/11684/raPDd/5/到这个:
var fi,se,en;
var des = "<p>FI: This is fi name, This is fi manufacturer <br /> SE:This is se name, This is se manufacturer <br /> EN: This is en name, This is en manufacturer</p>";
var match = des.match(/<p>FI:([a-zA-Z ,]+)<br \/> SE:([a-zA-Z ,]+)<br \/> EN:([a-zA-Z ,]+)<\/p>/);
fi = match[1];
se = match[2];
en = match[3];
//After that just split on the comma:
var fi_name = fi.split(",")[0];
var fi_manu = fi.split(",")[1];
var en_name = en.split(",")[0];
var en_manu = en.split(",")[1];
var se_name = se.split(",")[0];
var se_manu = se.split(",")[1];