【问题标题】:JavaScript replace() regex by index numberJavaScript replace() 正则表达式按索引号
【发布时间】:2011-03-25 12:49:47
【问题描述】:

我有以下字符串和正则表达式:

var string = "Dear [to name], [your name] has decided to share this [link]"; 
var patt = /\[+[A-Za-z0-9]+\]/;

我希望能够通过动态输入更改每个括号中的变量。如何使用 match()replace() 来定位此正则表达式的第 1 次、第 2 次和第 3 次出现?

编辑:目前,如果我执行document.write(body.match(patt)); 之类的操作,它将仅匹配最后一个 [link]

编辑:整个字符串取自文本框的值。每个括号的值取自其他文本输入,需要先插入到字符串中,然后再将文本放回文本框。

【问题讨论】:

  • 出于好奇,只使用变量怎么样?
  • 文本取自 textbox.value
  • 只是为了澄清-格式字符串(“亲爱的[blah] etc [blah]”)取自文本框,还是您填写该字符串的值取自文本框?
  • @Merlyn Morgan-Graham:整个字符串取自文本框的值。每个括号的值取自其他文本输入,需要在文本放回文本框之前插入到字符串中

标签: javascript regex replace


【解决方案1】:

使用函数作为replace 方法的第二个参数:

var replacement = { "to name": "Joe", "your name": "Fred", "link": "foo" };

string = string.replace(/\[([^\]]+)\]/g, function (_, group) {
    return replacement[group];
});

哦,您的模式只匹配 [link] 文本的原因是因为它只允许括号之间的字母数字字符,而不是空格。

编辑:如果括号的内容不重要,并且您只想按顺序替换它们,请使用数组而不是哈希:

var replacement = [ "Joe", "Fred", "foo" ];
var index = 0;
string = string.replace(/\[[^\]]+\]/g, function () {
    return replacement[index++];
});

【讨论】:

  • 很遗憾,我无法通过括号之间的内容进行匹配,因为这可能会改变
【解决方案2】:

假设括号中的项目总是相同的,您根本不必使用正则表达式。

var string = "Dear [to name], [your name] has decided to share this [link]"; 
var name = 'Bob';
var your_name = 'Jacob';
var link = 'http://google.com';

string = string.replace( '[to name]', name ).replace( '[your name]', your_name ).replace( '[link]', link )

alert( string )​

【讨论】:

  • 这就是问题所在,这些括号中的值会改变,所以我需要一种方法来用索引/顺序替换它们
  • 明白了。那么在这种情况下,@Sean 的答案 > 我的。
猜你喜欢
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多