【问题标题】:String replace in JavaScript (like Query Binding) [duplicate]JavaScript中的字符串替换(如查询绑定)[重复]
【发布时间】:2020-02-24 21:37:38
【问题描述】:

感谢您回答我的问题,我认为这不是插值,所以我更改了标题,在您将其标记为 duplicate 作为 JavaScript 中的字符串插值之前,请阅读问题仔细,因为我已经阅读了 JavaScript 的另一个插值问题,但其中没有一个具有与我的代码相同的方式(我在问题中说明了原因),并且我不想使用插件。

大家好,首先我想让你知道我编写这段代码的目的,你可以说这个主要原因是用 MySQL 为 Express 构建查询绑定,但我也会出于其他原因使用这段代码。

我想了解 Javascript / Typescript 中的字符串插值,它的工作原理类似于 Code Igniter source 中代码中的查询绑定

// Code 1
let person = 'ujang'
let age = 23

console.log("Hello, %s. You're age is %d years old.", person, age)
// Hello, ujang. You're age is 23 years old.

// The function is similiar to this code
// $sql = "insert into tbl_user (name, age, groupname) values (?, ?, ?)";
// $this->db->query($sql,array('codeigniter, 35, 'Group 1'));

正如您在上面的代码中看到的那样,我使用了 console.log,它可以按我的意愿工作,但是因为 console.log 是无效的并且没有返回任何值,所以我不能在实际情况下使用它。

// Code 2
const str = 'helow, %s. and you want %d piece of cake.?'
const name = 'ujang'
const want = 13

const myFunction = (value, ...optionalParams) => {

    // The function I want is similiar with Query Binding in Code Igniter
    // And it can handle dynamicly params
    // This only sample
    value = value.replace('%s', optionalParams[0])
    value = value.replace('%d', optionalParams[1])
    return value
}

myFunction(str, name, want)
// helow, ujang. and you want 13 piece of cake.?

在代码 2 中,我将尝试创建一个按预期工作的函数,但仅适用于静态参数。

// Code 3
const names = 'ujang'
const arg1 = 'good' 
const argN = 'better'

const dontWantFunction = (value, arg1, argN) => {

    return `helow, ${value}, this function is ${arg1} but any ${argN} solution.?`
}

dontWantFunction(names, arg1, argN)
// helow, ujang, this function is good but any better solution.?

在代码 3 中是我并不真正想要的函数,因为它很难管理并且函数内部有更多的硬编码文本。

有谁知道如何在Code 2中填写myFunction

或任何从事类似代码工作的人。?

或者知道一些可以引导我找到这个解决方案的文档/文章。?

我正在等待您的回复,这将对我有很大帮助, 感谢您的关注。

【问题讨论】:

  • 不,这在我的问题中看起来像代码 3。感谢您的关注。
  • 这个问题有 18 个答案。全部 18 个看起来都像 Code 3?
  • 哦,对不起@HereticMonkey,以前我只阅读了正确的答案,但是其中一些使用${} 和'str' + 'str',另一个使用插件Kiwi 和sprintf。这不是我真正想要的代码。
  • 带有复选标记的答案是接受答案,这意味着它对原始提问者的帮助最大。这并不意味着它只是正确的答案,甚至完全正确。
  • 我不明白你的意思,但是从 18 个答案中我没有看到我想要的类似答案,最近的是 Kiwi 插件和原型方式,但这不是我的方式想要我的代码。我已经有了下面的答案。但感谢您的关注。

标签: javascript typescript


【解决方案1】:

你可以尝试这样的事情,我们按顺序从optionalParams中取出值并替换匹配的值

const str = 'helow, {{value}}. and you want {{value}} piece of cake.?'
const name = 'ujang'
const want = 13

const myFunction = (value, ...optionalParams) => {
  return value.replace(/\{\{value\}\}/g, (m) => optionalParams.shift() || m)
}

console.log(myFunction(str, name, want))

【讨论】:

  • 好吧。非常感谢您的快速回复@CodeManiac。你能用比 {{v}} 更短的价格购买 {{value}} 吗?
  • @Sae 是的,你可以使用任何你想要的东西来代替{{value}},你可以用{{v}} 替换{{value}} 并在替换中将模式更改为\{\{v\}\}
  • 我知道了,用 ? 更改为 {{value}}和正则表达式 /\?/.
猜你喜欢
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 2020-12-19
  • 2012-07-23
  • 2019-01-03
  • 2019-02-16
  • 2020-07-11
  • 2023-03-27
相关资源
最近更新 更多