如何从字符串中剥离文本
How can I strip text from string?
我有一个变量保存单行字符串,它是像这样的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: too.
例如,结果将如下所示:
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中看一下demo
现在抛出null错误。
编辑v v v
它不工作在现场的网站。des变量完全是这样的。
您可以查找指定的模式并从中提取相关信息:
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 + ':([^,]+)'
可以解释为:求出s
w
冒号后的值这里是更新后的小提琴
处理所有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));
在这里
要访问这些变量中的任何一个(没有JSON.stringify()
,直接方法返回,即f('SE', des)
),您可以这样做:
// for fi manufacturer
fi.manufacturer
// for en name
en.name
// etc..
在我看来,通过使用这个,你有一个更加模块化的方法,并且更少的错误机会。
我把你的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);
编辑:
我没有看到您需要在单独的变量中使用名称和制造商,我将fiddle: 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];
这是一个可能的解决方案:
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/
相关文章:
- 如何使用jquery在填充自动完成的值后使文本框只读
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 用程序搜索JQuery数据表中的文本
- jQuery匹配JSON对象的部分文本
- onkeyup无法动态创建多个文本区域
- 如何在下面的ES6循环中获得前面的文本
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- 借助asp.net验证或java脚本对多个文本进行验证
- 无法在ajaxStart中更改跨度文本
- 高亮显示时编辑文本大小和颜色
- 如何将文本链接转换为谷歌 API 剥离的真实链接
- 如何剥离从网络收获中获得的部分文本
- 剥离JS文本并将结果保存到变量中
- 谷歌博客剥离
标签,需要一种方法来文本缩进每个撇号的开始
- 从文本区域中剥离html按钮点击并存储剥离的文本
- 剥离Firefox中的文本内容
- regex帮助剥离纯文本聊天日志
- 如何从字符串中剥离文本