我有这个结构,我只想提取 FN
和 TEL
:
BEGIN:VCARD
VERSION:2.1
N:Pepe;Perez;;;
FN:Pepe Perez
TEL;HOME:+549465738283
END:VCARD
BEGIN:VCARD
VERSION:2.1
N:Jose;Perez;;;
FN:Jose Perez
TEL;CELL:+549465738284
END:VCARD
喜欢:
[
{name: 'Pepe perez', tel: '+549465738283'},
{name: 'Jose perez', tel: '+549465738284'}
]
我有这个代码:
var file = fs.readFileSync('app/vcards/00003.vcf', 'utf-8');
var p = new RegExp(/(^FN:)(.*)(\n)(TEL;)(.*:)(\+)([0-9]+)/g);
console.log(p.exec(file));
但结果是null
有人帮助我吗?
最佳答案
这并不是真正的正则表达式,但根据要求,这里有一种手动解析 vCard 的方法,因为我相信这是最容易跟踪和修改的
var file = fs.readFileSync('app/vcards/00003.vcf', 'utf-8');
var arr = [];
var obj = {};
file.split("\n").forEach(function(line) {
if ( line.indexOf('FN') === 0 ) {
obj.name = line.split(':').pop().trim();
} else if ( line.indexOf('TEL') === 0 ) {
obj.tel = line.replace(/[^0-9+]/g,'');
arr.push(obj);
} else if ( line.indexOf('END') === 0 ) {
obj = {};
}
});
var file = document.getElementById('test').innerHTML.trim();
var arr = [];
var obj = {};
file.split("\n").forEach(function(line) {
if ( line.indexOf('FN') === 0 ) {
obj.name = line.split(':').pop().trim();
} else if ( line.indexOf('TEL') === 0 ) {
obj.tel = line.replace(/[^0-9+]/g,'');
arr.push(obj);
} else if ( line.indexOf('END') === 0 ) {
obj = {};
}
});
document.body.innerHTML = '<pre>' + JSON.stringify(arr, null, 4) + '</pre>';
<div id="test">
BEGIN:VCARD
VERSION:2.1
N:Pepe;Perez;;;
FN:Pepe Perez
TEL;HOME:+549465738283
END:VCARD
BEGIN:VCARD
VERSION:2.1
N:Jose;Perez;;;
FN:Jose Perez
TEL;CELL:+549465738284
END:VCARD
</div>
还应该注意的是,也有可用的中间件
https://www.npmjs.com/package/vcard
它基本上做同样的事情,分割行并查找 BEGIN
和 END
来获取每张卡片等。
关于javascript - Javascript 中的正则表达式 vcf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30720836/