列表中的 Javascript 字符串分隔符未正确转义

列表中的 Javascript 字符串分隔符未正确转义

我正在尝试使用listings显示 Javascript 代码。以下是另一个问题,我制定了以下代码:

\documentclass{article}
\usepackage{listings}
\lstdefinelanguage{JavaScript}{
    keywords={break, case, catch, continue, debugger, default, delete, do, else, 
              finally, for, function, if, in, instanceof, new, return, switch, 
              this, throw, try, typeof, var, void, while, with},
    morekeywords={class, export, boolean, throw, implements, import, this},
    comment=[l]{//},
    morecomment=[s]{/*}{*/},
    string=[b]",
    morestring=[b]',
    sensitive=true
}

\begin{document}
\begin{lstlisting}[breaklines={true}, language={Javascript}, numbers=left]
var string = "This is special' string";
var alpha = document.selection;
str = str.replace(/[!.:?,;\"]/g, '');
dictionary_access ("" + t );
var alpha = document.selection;
\end{lstlisting}
\end{document}

但是显示的列表格式不正确(字符串外的空格被突出显示)。我猜是因为字符串分隔符没有正确转义。

列表输出

其他人也有一个与 Basic 有类似问题。我尝试string=[b]"[bd]替换[m]单引号和双引号中的 [b]。还尝试使用,string=[s]""但没有成功。

答案1

看起来,问题在于listings未能识别出第 3 行中的双引号位于“字符串”(当然,实际上是正则表达式)内。因此,第 3 行中的双引号打开了一个字符串文字,该字符串文字由第 4 行中的第一个双引号关闭,但随后第 4 行中的第二个双引号又打开了一个新的字符串文字。

我认为你应该能够解决这个问题,只需将其变成/字符串分隔符即可。换句话说,添加

morestring=[b]/

到你的\lstdefinelanguage

"'的交互不应该有任何问题/,因为/在 中不需要转义"...",反之亦然。

相关内容