Node.js 中正则表达式无法匹配文本的问题


有一个正则:


 ^    description(?s).*?(?=^    name:\n)

我使用的escape函数:


 RegExp.escape= function(s) {
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};

在程序中,将其escape成如下形式:


 /\^    description\(\?s\)\.\*\?\(\?=\^    name:\\n\)/g

我要匹配的文本如下:


 365230:
    basePrice: 2415.0
    description:
        de: Ultraleichte Legierung, die die maximale Stärke der Dropsuitpanzerung
            steigert, ohne dabei die Bewegungsgeschwindigkeit einzuschränken.
        en: Ultra-light alloy that increases the maximum strength of dropsuit armor
            without affecting movement speed.
        es: Una aleación ultraligera aumenta la fuerza máxima del blindaje de los
            trajes de salto sin afectar a su velocidad de movimiento.
        fr: Alliage ultra-léger qui augmente la force maximale de l'armure de la combinaison
            sans affecter la vitesse de déplacement.
        it: Lega leggerissima che aumenta la solidità massima della corazza dell'armatura
            senza penalizzare la velocità di movimento.
        ja: 運動速度に影響を及ぼすことなく降下スーツのアーマーの最大強度を上げる超軽量の合金。
        ru: Сверхлегкий сплав, который увеличивает максимальную прочность брони скафандров
            без ущерба скорости передвижения.
    groupID: 351121
    marketGroupID: 365245
    name:
        de: Verbesserte Ferroscale-Platten
        en: Enhanced Ferroscale Plates
        es: Placas de ferroescamas mejoradas
        fr: Plaques Ferroscale optimisées
        it: Lamiere Ferroscale perfezionate
        ja: 強化型ファロースケールプレート
        ru: Улучшенные пластины 'Ferroscale'
    portionSize: 1
    published: true
    volume: 0.01

目标是将以下内容从文本中去掉:


 description:
        de: Ultraleichte Legierung, die die maximale Stärke der Dropsuitpanzerung
            steigert, ohne dabei die Bewegungsgeschwindigkeit einzuschränken.
        en: Ultra-light alloy that increases the maximum strength of dropsuit armor
            without affecting movement speed.
        es: Una aleación ultraligera aumenta la fuerza máxima del blindaje de los
            trajes de salto sin afectar a su velocidad de movimiento.
        fr: Alliage ultra-léger qui augmente la force maximale de l'armure de la combinaison
            sans affecter la vitesse de déplacement.
        it: Lega leggerissima che aumenta la solidità massima della corazza dell'armatura
            senza penalizzare la velocità di movimento.
        ja: 運動速度に影響を及ぼすことなく降下スーツのアーマーの最大強度を上げる超軽量の合金。
        ru: Сверхлегкий сплав, который увеличивает максимальную прочность брони скафандров
            без ущерба скорости передвижения.
    groupID: 351121
    marketGroupID: 365245

最终效果如下:


 365230:
    basePrice: 2415.0
    name:
        de: Verbesserte Ferroscale-Platten
        en: Enhanced Ferroscale Plates
        es: Placas de ferroescamas mejoradas
        fr: Plaques Ferroscale optimisées
        it: Lamiere Ferroscale perfezionate
        ja: 強化型ファロースケールプレート
        ru: Улучшенные пластины 'Ferroscale'
    portionSize: 1
    published: true
    volume: 0.01

在程序中检验正则是否匹配:


 re1.test(data);

返回 false

是哪里出现了问题?

正则表达式 node regexp JavaScript

粤漫三色堇 9 years, 2 months ago

你的正则没有匹配到目标文本


随便写个吧


 var reg = /(?:\t| )*description:(?:\r\n|\r|\n)((?:\t| )*(?:\w+:)?.*(?:\r\n|\r|\n))*?(?=(?:\t| )*name:)/g;

用户名只是浮云 answered 9 years, 2 months ago

Your Answer