2010-08-04 2 views
3

У меня есть следующая строка и регулярное выражение:JavaScript заменить() регулярное выражение по порядковому номеру

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

Я хочу, чтобы иметь возможность изменять каждый из заключенных в скобки переменных с динамическим входом. Как я могу использовать match() или replace() для задания 1-го, 2-го и 3-го появления этого регулярного выражения?

EDIT: На данный момент, если я делаю что-то вроде document.write(body.match(patt)); он будет соответствовать только последний [ссылка]

EDIT: вся строка брать из значения в текстовое поле. Значения для каждой из скобок берутся из других текстовых вводов и должны быть вставлены в строку до того, как текст будет помещен обратно в текстовое поле.

+0

Из любопытства, как насчет использования переменных? – hookedonwinter

+0

Текст берется из текстового поля. – kalpaitch

+0

ах я вижу. отметил. – hookedonwinter

ответ

10

Используйте функцию в качестве второго аргумента метода replace:

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

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

О, и причина шаблон только сопоставления [link] текста, потому что это позволяет только буквенно-цифровые символы в скобках, а не пробела.

EDIT: Если содержание скобок не имеет значения, и вы просто хотите, чтобы заменить их, чтобы использовать массив вместо хэша:

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

. Благодарю вас за это напоминание о пробеле. – kalpaitch

+0

К сожалению, я не могу сопоставить содержимое между скобками, так как это может измениться. – kalpaitch

+0

ура совершенствуется, имеет смысл и работает – kalpaitch

3

Предполагая, что эти заключенные в квадратные скобки элементы всегда одинаковы, вам не нужно использовать регулярное выражение вообще.

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)​ 
+0

thats the issue, эти значения в квадратных скобках будут меняться, поэтому мне нужен способ их замены по индексу/порядку – kalpaitch

+0

gotchya , то в этом случае, ответ @ Sean> мой. – hookedonwinter

Смежные вопросы