Соответствие двух строк, хранящихся в разных переменных в nodejs
Я новичок в 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 ответа
+ Изменить
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
Я бы использовал регулярное выражение, например:
//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/ (или что-то подобное).