有没有办法捕获整个维基百科链接

问题描述 投票:0回答:1

我正在为维基百科开发一个工具,可以修复错误并替换乌尔都语文本中的错误单词。现在,它正在替换任何地方的文字,甚至在链接和模板中也是如此。但我想避免更改链接和模板以防止破坏它们。我尝试了不同的方法来做到这一点,但它不起作用。如何确保该工具不会更改双方括号或双大括号内的任何文本?

这是修复单词的函数的代码。它已经跳过了“[[JavaScript]]”和“{{JavaScript}}”等文本,但我需要它跳过整个链接或那些包含不正确单词的链接,例如“[[JavaScript软件的源代码]]”和“ {{JavaScript软件的源代码}}”。具体来说,我希望该工具忽略双方括号或双大括号内的所有文本。

async function imla(imlaWords) {
try {
    const pageTitle = mw.config.get('wgTitle');
    let pageContent = await loadPage(pageTitle);
    const originalContent = pageContent;

    // Regex patterns for wiki links and words between curly braces
    const wikiLinkRegex = /\[\[(.*?)(\|.*?)?\]\]/g; // Regex for wiki links
    const curlyBracesRegex = /\{\{(.*?)(\|.*?)?\}\}/g; // Regex for words between curly braces

    imlaWords.forEach(([incorrectWord, correctWord]) => {
        const regex = new RegExp(incorrectWord, 'g');
        pageContent = pageContent.replace(regex, (match) => {
            // Check if the matched word is within square brackets or curly braces
            const isWithinSquareBrackets = wikiLinkRegex.test(match);
            const isWithinCurlyBraces = curlyBracesRegex.test(match);
            if (isWithinSquareBrackets || isWithinCurlyBraces) {
                // If within square brackets or curly braces, don't replace
                return match;
            } else {
                // Otherwise, replace with the correct word
                return correctWord;
            }
        });
    });

    const imlaCorrected = originalContent !== pageContent;

    if (imlaCorrected) {
        // اصلاحات کو صفحہ میں محفوظ کیا جا رہا ہے
        await savePage(pageTitle, pageContent);
        openDiffPage(pageTitle); // اصلاحات کے بعد فرق صفحہ کھولنے کے لیے
    } else {
        // اگر اصلاح کی ضرورت نہ ہو تو
        mw.notify('اِس صفحہ میں اصلاح کی ضرورت محسوس نہیں ہوئی۔');
    }
} catch (error) {
    mw.notify(error.message);
}

}

javascript regex
1个回答
0
投票

给你:

let pageContent = 'sagf sag [[sa gsagsag]] as gad sdgsg [[sgsg]] sgg hed {{jhssfg sdhj}} he ha sg'

pageContent = pageContent.replace(/(?<=^|\]\]|\}\}).*?(?=\[\[|\{\{|$)/g, nonlink => {
    return nonlink.toUpperCase()
    //return nonlink.replace(incorrectWord, correctWord)
})

console.log(pageContent)
"SAGF SAG [[sa gsagsag]] AS GAD SDGSG [[sgsg]] SGG HED {{jhssfg sdhj}} HE HA SG"

如果您需要帮助分隔链接/模板之外的单词,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.