我有一份所有莎士比亚十四行诗的清单,我正在制作一个搜索每个十四行诗的功能.但是,我希望能够使用阿拉伯数字搜索它们(例如"/ sonnet 122"..txt的格式如下:
I
This is a sonnet
II
This is a second sonnet
Run Code Online (Sandbox Code Playgroud)
我现在正在使用节点来尝试这样做,但是我从昨天起就一直在尝试无济于事.我昨天的最后一次尝试是使用'替换'方法:
'use strict';
//require module roman-numerals, which converts roman to arabic
var toArabic = require('roman-numerals').toArabic;
//require file-handling module
var fs = require('fs');
fs.readFile('sonn.txt', 'utf8', function (err,data) {
if (err) {
console.log(err);
} else {
var RN = /[A-Z]{2,}/g;
var found = data.match(RN); //finds all roman numbers and puts them in an array
var numArr = [];
for (var i = 0; i < found.length; i++ ){
numArr.push(toArabic(found[i])); //puts all arabic numbers in numArr
}
for (var e = 0; e < found.length; e++){
data.replace(found, found.forEach((x, i)=> {
toArabic(x)
}
});
Run Code Online (Sandbox Code Playgroud)
然后我尝试用以下代替它们:
data.replace(found, function(s, i){
return numArr[i];
});
Run Code Online (Sandbox Code Playgroud)
然后我试着用for循环.我没有保留该代码,但它是这样的:
for(var i=0;i<found.length;i++){
data.replace(found, numArr[i]);
}
Run Code Online (Sandbox Code Playgroud)
最后一个代码替换每个数字,然后擦除数据并替换下一个数字:
replace(abc, 123) -> 1bc, a2c, ab3
Run Code Online (Sandbox Code Playgroud)
如何让它迭代数据中的每个匹配并保留它?然后将其保存到新的txt应该很容易.
(此外,我的RegExp只找到多个字符罗马数字,以避免替换可能在行尾找到的孤独的我.)
您必须写回替换的字符串,并且可以使用回调replace()
'use strict';
var toArabic = require('roman-numerals').toArabic;
var fs = require('fs');
fs.readFile('sonn.txt', 'utf8', function (err,data) {
if (err) {
console.log(err);
} else {
data = data.replace(/[A-Z]{2,}/g, function(x) {
return toArabic(x);
});
}
});
Run Code Online (Sandbox Code Playgroud)