gpt4 book ai didi

JavaScript String.raw 不处理替换来获取 "raw"原始字符串?

转载 作者:行者123 更新时间:2023-11-28 03:29:00 26 4
gpt4 key购买 nike

我想使用用户提供的字符串作为 JavaScript 函数的参数,因此需要转义所有可能导致脚本中断的字符。

这是为了与处理原始 JavaScript 的 WKWebView.evaluateJavaScript() 一起使用的 Swift 到 JavaScript 桥。

window.someObject.method( ... user provided string ... )

字符串可以包含任何内容,换行符、双引号、反引号、unicode 转义序列、替换等。

目前我使用模板文字和转义:

  • \和\\(单反斜杠加双反斜杠)
  • ${ 与\${
  • ` 带有反斜杠+反引号

我正在尝试让它与 String.raw 一起使用,但我不知道如何转义替换。

潜在的用户输入:

hello ${1+1}

我想要那个确切的字符串作为我的 JavaScript 函数的参数,不处理任何替换。

这是我尝试过的:

// User input is: hello ${1+1}
console.log(String.raw`hello ${1+1}`)
console.log(String.raw`hello \${1+1}`) // So close, but not quite

console.log('I want: hello ${1+1}')

我想要的是这样的:

window.someObject.method( String.raw`hello ${1+1}` ) → hello ${1+1}

这可能吗?

最佳答案

你可以使用这个:

/**
* Prepare multi-line string for inclusion in JavaScript.
*
* Note! New line characters are added because slash (\) at the end of template string would brake template syntax.
* Starting new line is added for code beauty ;-).
*
* @param {String} text Some string.
*/
prepareTemplateString(text) {
if (text.search(/[`$]/)>=0) {
text = text.replace(/([`$])/g, '\\$1');
return "String.raw`\n"+text+"\n`.replace(/\\\\([`$])/g, '\\$1')";
}
return "String.raw`\n"+text+"\n`";
}

但我对此并不满意。看起来 String.raw 实际上比标准模板字符串慢。我认为 String.raw 会有一些优化,但看起来它只是模板字符串之上的另一层。

关于JavaScript String.raw 不处理替换来获取 "raw"原始字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58336311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com