├── views └── pages │ └── index.ejs ├── package.json └── index.js /views/pages/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Extract emails 5 | 6 | 7 |
8 | Pase text here:
9 | 10 |
11 | 12 |
13 | 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "emex", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node index.js" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "body-parser": "^1.15.2", 14 | "ejs": "^2.5.2", 15 | "express": "^4.14.0", 16 | "lodash": "^4.16.2" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var app = express(); 3 | var bodyParser = require('body-parser'); 4 | var _ = require('lodash'); 5 | 6 | app.set('port', (process.env.PORT || 5000)); 7 | app.use(bodyParser.urlencoded({ extended: true })); 8 | app.use(bodyParser.json()); 9 | 10 | app.use(express.static(__dirname + '/public')); 11 | 12 | // views is directory for all template files 13 | app.set('views', __dirname + '/views'); 14 | app.set('view engine', 'ejs'); 15 | 16 | app.get('/', function(request, response) { 17 | response.render('pages/index'); 18 | }); 19 | 20 | app.post('/parse', function(req, res) { 21 | var text = req.body.emails; 22 | var emails = _.uniqBy(extractEmails(text), e => e); 23 | res.setHeader('Content-disposition', 'attachment; filename=emails.csv'); 24 | res.send(emails.join("\n")); 25 | }); 26 | 27 | app.listen(app.get('port'), function() { 28 | console.log('Node app is running on port', app.get('port')); 29 | }); 30 | 31 | function extractEmails(text) { 32 | return text.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi); 33 | } 34 | --------------------------------------------------------------------------------