\
не является escape-символом в строковых литералах XPath. (Если бы это было так, вы могли бы просто убрать одну из кавычек с обратной косой чертой, и вам никогда не пришлось бы беспокоиться о concat
!) имеет смысл.
Таким образом, в выводе не должно быть обратной косой черты, он должен выглядеть примерно так:
concat('"', "'hi'", '"')
Я предлагаю:
function xpathStringLiteral(s) {
if (s.indexOf('"')===-1)
return '"'+s+'"';
if (s.indexOf("'")===-1)
return "'"+s+"'";
return 'concat("'+s.replace(/"/g, '",\'"\',"')+'")';
}
Это не так эффективно, как могло бы быть (оно будет включать в себя начальные / конечные пустые сегменты строки, если первый / последний символ является двойной кавычкой), но это вряд ли имеет значение.
(Вы действительно имеете в виду let
в вышеприведенном? Это нестандартная функция языка только для Mozilla; обычно используется var
.)