如何替换阿拉伯语等效字符串中的所有罗马数字?

Bes*_*sto 7 javascript

我有一份所有莎士比亚十四行诗的清单,我正在制作一个搜索每个十四行诗的功能.但是,我希望能够使用阿拉伯数字搜索它们(例如"/ 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只找到多个字符罗马数字,以避免替换可能在行尾找到的孤独的我.)

ade*_*neo 1

您必须写回替换的字符串,并且可以使用回调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)

这里还有一些匹配罗马的正则表达式