Замена энного экземпляра regex соответствует в JavaScript

Это может быть легко жестко закодировано в словаре, если есть ограниченное количество чисел, которое вы хотите проанализировать.

Для немного более сложных случаев вы, вероятно, захотите сгенерировать этот словарь автоматически, основываясь на относительно простой грамматике чисел. Что-то вроде этого (конечно, обобщенного ...)

for i in range(10):
   myDict[30 + i] = "thirty-" + singleDigitsDict[i]

Если вам нужно что-то более обширное, то похоже, что вам понадобятся инструменты для обработки естественного языка. Эта статья может быть хорошей отправной точкой.

25
задан Sophie Alpert 9 March 2009 в 23:52
поделиться

2 ответа

вот что-то, что работает:

"23||45||45||56||67".replace(/^((?:[0-9]+\|\|){n})([0-9]+)\|\|/,"$1$2&&")

, где n является тем меньше, чем энный канал, (конечно, Вам не нужно то первое подвыражение, если бы n = 0)

И если Вы хотели бы, чтобы функция сделала это:

function pipe_replace(str,n) {
   var RE = new RegExp("^((?:[0-9]+\\|\\|){" + (n-1) + "})([0-9]+)\|\|");
   return str.replace(RE,"$1$2&&");
}
20
ответ дан Sam Hasler 28 November 2019 в 20:47
поделиться
function pipe_replace(str,n) {
    m = 0;
    return str.replace(/\|\|/g, function (x) {
        //was n++ should have been m++
        m++;
        if (n==m) {
            return "&&";
        } else {
            return x;
        }
    });
}
0
ответ дан 28 November 2019 в 20:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: