匹配存储在nodejs中不同变量中的两个字符串
Matching two strings stored in different variables in 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"
我想从文件中的任意行提取 link。
我试图匹配模式以在 'http' 中获取 'h' 的索引号并进一步提取它。停留在 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")
}
});
})
我会使用正则表达式,例如:
//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/(或类似的东西)
测试你需要的正则表达式设置
改变
findInFiles.find({'term': "http", 'flags': 'ig'}, 'merged/', '.sol$')
到
var regex = 'http.*?(?=\")'
findInFiles.find({term: regex, flags: 'g'}, 'merged/', '.sol$')
正则表达式匹配 http/https link 直到在 link 的末尾找到 "
,但不捕获组中的 "
。 (?=\")
是正面前瞻匹配。
在此处查看正则表达式的解释和工作示例 - https://regex101.com/r/4RAr0Z/1
我是 node.js 的新手。我正在练习一个程序来查找字符串中的模式并从文件中提取那部分行。 归档为:
Something written in a file saved as filename.ext.
At a line, it contains a link.
import "https:\//www.hostname.com/$path"
我想从文件中的任意行提取 link。 我试图匹配模式以在 'http' 中获取 'h' 的索引号并进一步提取它。停留在 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")
}
});
})
我会使用正则表达式,例如:
//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/(或类似的东西)
测试你需要的正则表达式设置改变
findInFiles.find({'term': "http", 'flags': 'ig'}, 'merged/', '.sol$')
到
var regex = 'http.*?(?=\")'
findInFiles.find({term: regex, flags: 'g'}, 'merged/', '.sol$')
正则表达式匹配 http/https link 直到在 link 的末尾找到 "
,但不捕获组中的 "
。 (?=\")
是正面前瞻匹配。
在此处查看正则表达式的解释和工作示例 - https://regex101.com/r/4RAr0Z/1