2015-04-10 2 views
0

У меня есть строка в Javascript, которая содержит переменные с форматом ${var-name}. Например:Javascript regex для извлечения переменных

'This is a string with ${var1} and ${var2}' 

Мне нужно, чтобы получить эти переменные в массиве: ['var1','var2'].

Возможно ли это с регулярным выражением?

+0

это дает '[ "$ {var1}", "$ {var2}"]' – atmd

+0

ли вам нужен массив переменных или массив имен переменных, упомянутых в строке? –

+0

см. Мой пример, массив имен переменных – ps0604

ответ

2

У попробовать с:

/\$\{(\w+?)\}/ 

Бегущий пример, большое спасибо @RGraham:

var regex = new RegExp(/\$\{(\w+?)\}/g), 
    text = "This is a string with ${var1} and ${var2} and {var3}", 
    result, 
    out = []; 
while(result = regex.exec(text)) { 
    out.push(result[1]); 
} 
console.log(out); 
+1

Вы должны попробовать это с помощью объекта RegExp: http://jsfiddle.net/bc01topp/ – CodingIntrigue

+0

@RGraham: Вы правы, я не привык к javascript regex. – Toto

+0

Вы были достаточно близки: если вы хотите использовать переменные в Regex, вы используете объекты RegExp с кавычками: 'var regex = new RegExp (" \\ $ \\ {(\\ w +?) \ \} "," g ")' – nils

0
var str = 'This is a string with ${var1} and ${var2}'; 

var re = /\$\{(\w+?)\}/g; 
var arr = []; 
var match; 
while (match = re.exec(str)) { 
    arr.push(match[1]); 
} 

console.log(arr); 
+0

Мне не нужно заменять переменные, просто чтобы загрузить их в массив – ps0604

+0

ok. Я изменил свой ответ – alsotang

+0

'\ w +?' - можете ли вы объяснить, почему здесь есть??? Что это значит? – CodingIntrigue

2

Это regex - \${([^\s}]+)(?=}) - должно работать.

Объяснение:

  • \${ - Матч буквальным ${
  • ([^\s}]+) - группа захвата, которая будет соответствовать 1 или более символов, которые не являются пробелами или буквальным }.
  • (?=}) - Положительный прогноз, который будет проверять, если мы, наконец, сопоставим буквально }.

Вот пример кода:

var re = /\${([^\s}]+)(?=})/g; 
 
var str = 'This is a string with ${var1} and ${var2} and {var3}'; 
 
var arr = []; 
 
    
 
while ((m = re.exec(str)) !== null) { 
 
    arr.push(m[1]); 
 
} 
 

 
alert(arr);

+1

Приятно видеть объяснение Regex для изменения! Однако это не учитывает '' 'и будет соответствовать' 'Это строка с {var1} 'тоже. Также все, что заканчивается на '}' like '', это тест}' – CodingIntrigue

+1

@RGraham: Я думаю, что эти случаи не ожидаются. Если они есть, то это действительно легко исправить с помощью '\ $ {([^ \ s}] +) (? =})'. Ответ обновлен. –

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