首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有特殊字符的Office.js通配符搜索导致Word Online崩溃,但未安装MSWord

带有特殊字符的Office.js通配符搜索导致Word Online崩溃,但未安装MSWord
EN

Stack Overflow用户
提问于 2019-06-24 20:42:16
回答 1查看 326关注 0票数 0

通配符搜索(如下面文章中详细介绍的示例)会使Word Online崩溃,同时对已安装的MSWord版本也能正常工作

https://docs.microsoft.com/en-us/office/dev/add-ins/word/search-option-guidance

我正在搜索下面的文本:“赞助商应在三十(30)内支付发票”

文本可以跨换行符/分节符,也可以不跨换行符/分节符。因此,我执行通配符搜索,如下所示:'Payment?of?invoices?by?Sponsor?shall?be?made?within?thirty?(30‘

这会导致Word-Online使浏览器崩溃。

有趣的是,下面的代码同时适用于Word Online和MSWord:

‘赞助商应在三十(30)天内支付发票’

'Payment?of?invoices?by?Sponsor?shall?be?made?within?thirty?(30)?days‘

通配符表达式中的未右括号似乎存在问题。

在上面的文章之后,它建议应该用方括号转义括号。以下代码在MSWord中工作正常,但在Word-Online中崩溃:

'Payment?of?invoices?by?Sponsor?shall?be?made?within?thirty?(30‘

更奇怪的是,只有当最后一个字符被转义时,方括号转义才有效。

这在MSWord和Word-Online中都有效:

‘包括?无形的?事物?(’

而这只在MSWord中起作用,会使Word-Online崩溃

包括“无形的”事物?(例如

上面文章中的示例模式‘**’使Word Online崩溃,而在MSWord中却可以正常工作。

代码语言:javascript
复制
input = 'include?intangible?things?[(]e';
const { Word } = window;
Word.run(context => {
    const { body } = context.document;
    const searchResults = body.search(input, {
        matchCase: false,
        ignoreSpace: true,
        ignorePunct: true,
        matchWildcards: true
    });
    context.load(searchResults);
    return context
        .sync()
        .then(() => {

        })
        .catch(error => {            
        });
});

通过Office.js应用编程接口执行时,MSWord和Word Online的行为应该相同。

这看起来像Word Online中的错误。我推测这可能与url编码有关。

或者,当目标是Word Online时,我没有正确地编码我的输入模式。在这种情况下,上面提到的文章需要更新,以详细说明特殊字符的在线“转义”是什么。

奇怪的是,转义括号本身就是特殊字符。

Word Online crashing

EN

回答 1

Stack Overflow用户

发布于 2019-06-25 18:55:15

这不是一个完美的答案,但它一下子解决了Word在线崩溃问题和未闭合括号问题。我将搜索字符串中的所有特殊字符都替换为“?”人物。这可能会导致一段错误的文本,但可能性很低,对于我试图实现的目标来说,这不是一个问题。

代码语言:javascript
复制
function replaceSpecialCharacters(input) {
    let modifiedInput = '';
    const specialCharacters = ['[', ']', '(', ')', '{', '}', '*', '?', '<', '>', '!', '@'];
    [...input].forEach(c => {
        if (specialCharacters.includes(c)) {
            modifiedInput = `${modifiedInput}?`;
        } else {
            modifiedInput = `${modifiedInput}${c}`;
        }
    });
    return modifiedInput;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56736859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档