我正在为维基百科开发一个工具,可以修复错误并替换乌尔都语文本中的错误单词。现在,它正在替换任何地方的文字,甚至在链接和模板中也是如此。但我想避免更改链接和模板以防止破坏它们。我尝试了不同的方法来做到这一点,但它不起作用。如何确保该工具不会更改双方括号或双大括号内的任何文本?
这是修复单词的函数的代码。它已经跳过了“[[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);
}
}
给你:
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"
如果您需要帮助分隔链接/模板之外的单词,请告诉我。