匹配存储在nodejs中的不同变量中的两个字符串

时间:2018-06-11 08:17:43

标签: javascript node.js file-read

我是node.js的新手。我正在练习一个程序来查找字符串中的模式并从文件中提取该部分行。 文件为:

Something written in a file saved as filename.ext.
At a line, it contains a link.
import "https:\//www.hostname.com/$path"

我想从文件中的任何一行提取链接。 我试图匹配模式以得到' h'在' http'并进一步提取它。坚持在nm(),因为它不是在变量作为参数。

var url=require('url')
var fs = require('fs');
var find = require('find');
var findInFiles = require('find-in-files');
var LineReader = require('linereader');
var nm = require('nanomatch');
var sol=require('./../bin/sol-merger')
var dir = './merged/';
var pth=process.cwd()+'/'+dir+'newfile.sol'
var flag=0
if (!fs.existsSync(dir)){
fs.mkdirSync(dir);
}
fs.createReadStream(sol.abs_path).pipe(fs.createWriteStream(dir+'/newfile.sol'));

findInFiles.find({'term': "http", 'flags': 'ig'}, 'merged/', '.sol$').then(function(results) {
//console.log("here...")
for (var result in results) {
    var res = results[result];
    console.log('found "' + res.matches[0] + '" ' + res.count+ ' times in "' + result + '"')
    console.log(sol.fl+"    "+result)   
}
var lr=new LineReader(pth)
lr.on('error', function (err) {
    console.log(err);
    console.log("error")
    lr.close();
});
lr.on('line', function (lineno, line) {
    console.log(lineno + "   " + line);
    if(nm.contains(`$line`,'*"http**"*')){
        console.log("found")
    }
});
})

2 个答案:

答案 0 :(得分:0)

我会使用正则表达式,例如:

//read in eg with fs module
var _test = 'import "https://www.github.com/xyz/abc.txt" \n import "https://www.github.com/xyz/xab.txt"';
var _reg = /["](.*?)["]/gm;
var _my_matches = _test.match(_reg);
console.log(_my_matches); //array with all matches

请注意,这是一个最小的例子。我建议您在https://regex101.com/(或类似的东西)

测试所需的正则表达式设置

答案 1 :(得分:0)

更改

var regex = 'http.*?(?=\")'
findInFiles.find({term: regex, flags: 'g'}, 'merged/', '.sol$')

"

正则表达式匹配http / https链接,直到链接末尾找到",但不会捕获组中的(?=\")return View(nameOrEmail.ToList()); 是积极的前瞻性匹配。

请在此处查看正则表达式的解释和工作示例 - https://regex101.com/r/4RAr0Z/1