javascript - Javascript 中的正则表达式 vcf

标签 javascript regex node.js

我有这个结构,我只想提取 FNTEL:

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

它基本上做同样的事情,分割行并查找 BEGINEND 来获取每张卡片等。

关于javascript - Javascript 中的正则表达式 vcf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30720836/

相关文章:

javascript - 尝试在 React JS 中渲染对象数组时出错

javascript - 我可以从 javascript 判断我的页面是否被硬刷新了吗?

python-3.x - 在Python中将特定的中文标点符号替换为相应的英文标点符号

python - python pandas中提取子字符串的正则表达式

正则表达式可选前瞻

node.js - Azure AD - 仅应用程序 token 中缺少角色声明

javascript - 从命令行执行多个 mongo 脚本

javascript - 基于对象字段值 Angular 6 的颜色 td

javascript - 在 JavaScript 数组中查找最后一个元素的最有效的计算方法是什么?

node.js - Multer + React + Nodejs Axios 请求