【问题标题】:problems using replaceText for special characters: [ ]使用 replaceText 处理特殊字符的问题:[]
【发布时间】:2012-06-11 12:08:30
【问题描述】:

我想将“\cite{foo123a}”替换为“[1]”并向后替换。到目前为止,我能够用以下命令替换文本

body.replaceText('.cite{foo}', '[1]');

但我没有设法使用

body.replaceText('\cite{foo}', '[1]');
body.replaceText('\\cite{foo}', '[1]');

为什么?

我根本无法进行反向转换

body.replaceText('[1]', '\\cite{foo}');

这将只替换“1”而不是 [],这意味着 [] 被解释为正则表达式字符集,转义它们将无济于事

body.replaceText('\[1\]', '\\cite{foo}');//no effect, still a char set
body.replaceText('/\[1\]/', '\\cite{foo}');//no matches

文档说明

不完全支持 JavaScript 正则表达式功能的子集,例如捕获组和模式修饰符。

我能否在某处找到有关受支持和不支持的内容的完整说明?

【问题讨论】:

    标签: google-apps-script google-docs


    【解决方案1】:

    我不熟悉 Google Apps Script,但这看起来像是普通的正则表达式问题。

    您的第二次转换不起作用,因为字符串文字 '\[1\]' 与 '[1]' 相同。您想将文本 \[1\] 引用为字符串文字,这意味着 '\\[1\\]'。字符串文字内的斜线没有相关含义;在这种情况下,您编写的模式与文本 /1/ 匹配。

    您的第一次转换不起作用,因为{...} 表示量词,而不是文字大括号,因此您需要\\\\cite\\{foo\\}。 (四个反斜杠是因为要匹配正则表达式中的文字 \ 是 \\,并且要使其成为字符串文字,它是 \\\\ - 两个转义的反斜杠。)

    【讨论】:

    • 您应该像使用常规 javascript 一样使用 Apps Script 正则表达式。文档中的此声明仅适用于“高级正则表达式使用”,以便使用这些的开发人员事先测试他们的正则表达式。凯文的解释解决了这个问题。
    • 谢谢你,我明天试试这个,让你知道它是否有效。我使用正则表达式很长一段时间,但这是我在 js 中使用正则表达式的开始,它再次不同o_O
    • 感谢它的工作,这个超级转义仍然很混乱,但我会学习:D
    • 一些小的更正:在答案中应该说 '\\[1\\]'
    • @select 谢谢!您看到了问题 :) — 分层语法是系统的,但很难考虑应该如何应用它们。这就是为什么语言通常提供正则表达式作为语言语法(您可以在 Perl 或 JavaScript 中编写 /\[1\]/,无需额外的字符串引用)或避免反斜杠转义以支持不转义或不同转义字符的字符串语法(“原始字符串”r"..." 在 Python 中,例如)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多