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

发布于 2022-09-01 18:51:39 字数 3296 浏览 13 评论 0

有一个正则:

^    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

是哪里出现了问题?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦断已成空 2022-09-08 18:51:39

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


随便写个吧

var reg = /(?:\t| )*description:(?:\r\n|\r|\n)((?:\t| )*(?:\w+:)?.*(?:\r\n|\r|\n))*?(?=(?:\t| )*name:)/g;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文