【问题标题】:Multiplying a symbol in a string将字符串中的符号相乘
【发布时间】:2015-03-09 17:20:31
【问题描述】:

javascript 中将字符串中某个符号的每次出现替换为自身 n 次的标准方法是什么?

我有文本字符串,其中每次出现的单引号符号都需要用加倍的单引号符号替换,即代替每次出现的单引号必须出现两个。这是为 PostgreSQL 调用预解析文本的标准任务。

我发现函数 replace() 不适合这个,即我们不能像replace('A','AA') 那样使用它,当我们有一个带有重复符号的字符串时,它在这种特殊情况下不起作用'Test AA',我们想把它变成'Test AAAA'

那么,这样做的正确方法是什么?

【问题讨论】:

  • 也许您正在寻找递归替换? stackoverflow.com/questions/1144783/…
  • “这是为 PostgreSQL 调用预解析文本的标准任务” - 不,只有当您的查询对 SQL 注入攻击开放时,它才是标准方法。使用参数化查询,你一开始就没有这个问题!同样从 javascript 执行 sql 查询听起来像是一场等待发生的安全噩梦。
  • 在之前的海报中,在服务器上运行 NodeJS 应用程序时这是正常的。

标签: javascript string


【解决方案1】:

replace('A','AA') 只会替换字符串中第一次出现的"A"。您想要一个“replaceAll”,您需要使用带有 g 标志的正则表达式:

'Test AA'.replace(/A/g, 'AA'); // Test AAAA

编辑以回答您的进一步问题。要使用变量构造正则表达式,您需要使用 RegExp 构造函数。这是一个详细的例子:

var find = 'A';
var replacement = find + find; // AA;
var regex = new RegExp(find, 'g');
var toReplace = 'Test AA';
var replaced = toReplace.replace(regex, replacement);
console.log(replaced); // Test AAAA

【讨论】:

  • 当要替换的文本和要替换的文本都是变量时,你如何做到这一点?
  • 我现在在另一个地方遇到了这个问题,我必须使用可变文本进行替换。
  • @user1102051 您需要手动使用RegExp 构造函数才能与变量一起使用。我已经为你更新了答案。
  • 干杯!我在其他地方发现了 - 是的,通过使用正常工作的 RegEx 对象。
  • 顺便说一句,如果变量 find 包含特殊符号,您的示例不会引用工作。在我的情况下,我必须替换命名为这样的变量:“$1”、“$2”等,所以在某些时候我有变量名 =“$1”。为了让它工作,我必须像这样创建新的 RegEx:new RegEx("\\" + find, replacement),这都是因为我有 $ 作为第一个字母。奇怪:)
猜你喜欢
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多