Соответствие двух строк, хранящихся в разных переменных в nodejs - PullRequest
0 голосов
/ 11 июня 2018

Я новичок в 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 голосов
/ 11 июня 2018

Изменить

findInFiles.find({'term': "http", 'flags': 'ig'}, 'merged/', '.sol$')

на

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

Регулярное выражение соответствует ссылке http / https до тех пор, пока " не будет найдено в конце ссылки, но не захватит " вгруппа.(?=\") - это положительное совпадение.

См. Объяснение и рабочий пример регулярного выражения здесь - https://regex101.com/r/4RAr0Z/1

0 голосов
/ 11 июня 2018

Я бы использовал регулярное выражение, например:

//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/ (или что-то подобное)

...