回到课程
本资料仅提供以下语言版本:English。请 帮助我们 将其翻译为 简体中文 版本。

查询引用字符串

构建一个正则表达式用于匹配双引号内的字符串 "..."

最重要的部分是字符串应该支持转义,正如 JavaScript 字符串的行为一样。例如,引号可以插入为 \",换行符为 \n,斜杠本身为 \\

let str = "Just like \"here\".";

对我们来说,重要的是转义的引号 \" 不会结束字符串匹配。

所以,我们应该匹配两个引号之间的内容,且忽略中间转义的引号。

这是任务的关键部分,否则这个任务就没什么意思了。

匹配字符串示例:

.. "test me" ..
.. "Say \"Hello\"!" ... (escaped quotes inside)
.. "\\" ..  (double slash inside)
.. "\\ \"" ..  (double slash and an escaped quote inside)

在 JavaScript 中,双斜杠用于把斜杠转义为字符串,如下所示:

let str = ' .. "test me" .. "Say \\"Hello\\"!" .. "\\\\ \\"" .. ';

// the in-memory string
alert(str); //  .. "test me" .. "Say \"Hello\"!" .. "\\ \"" ..

答案是 /"(\\.|[^"\\])*"/g

步骤如下:

  • 首先匹配左双引号 "
  • 接着如果有反斜杠 \\,则匹配其后跟随的任意字符。(技术上,我们必须在模式中用双反斜杠,因为它是一个特殊的字符,但实际上是一个反斜杠字符)
  • 如果没有,则匹配除双引号(字符串的结束)和反斜杠(排除仅存在反斜杠的情况,反斜杠仅在和其后字符一起使用时有效)外的任意字符:[^"\\]
  • …继续匹配直到遇到反双引号

运行代码如下:

let reg = /"(\\.|[^"\\])*"/g;
let str = ' .. "test me" .. "Say \\"Hello\\"!" .. "\\\\ \\"" .. ';

alert( str.match(reg) ); // "test me","Say \"Hello\"!","\\ \""