2015-03-04 4 views
-1

Я искал часы, пытаясь понять это, возможно, я могу спать на нем. Я пытаюсь выполнить часть строки RegEx и заменять ее значением, зависящим от слова после символа.Javascript RegEx Match Word после символа

«content.size | price: $ content.price» То, что я пытаюсь сделать, это использовать RegEx для замены частей моей строки на значение. Я хотел бы настроить таргетинг на все выражение content.size и content.price. Но слово «содержание». может быть что угодно. Я попытался написать выражение, но не имея каких-либо удачи

var firstString = "content.size | price: $content.price" 
var Re = new RegExp(/content.\b/); 
var newValue = firstString.match(Re); 
console.log(newValue); 

ввести код hereWhat Я ожидал от консоли:

content.size content.price 

Итак, я могу сказать:

firstString.replace(newValue, someOtherValue) 
+0

ввод "firstString". выход «newValue» где путаница? – artsmc

ответ

0

Одна из проблем, с регулярным выражением является то, что вы не избежать десятичной точки, которая соответствует любому символу, за исключением символа новой строки - документация здесь (.): https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions

Я попытался ниже, который возвращает массив контента .size и content.price

Вы можете попробовать и посмотреть, если это поможет вам:

var firstString = "content.size | price: $content.price"; 
var regex = /content\.[\S]+/g; 
var newValue = firstString.match(regex); 
console.log(newValue); 

Позвольте мне знать, если это поможет.

SO1

+0

Perfect.Хотелось бы, чтобы у меня было больше ресурсов для изучения RegEx для javascript. Я не понимаю, как бы я пришел к такому выводу, что вы за ссылку! – artsmc

+0

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

1

Вы можете использовать функцию замены, хотя я не на 100% уверен, что у меня вопрос правильный

var firstString = "content.size | price: $content.price" 
var regex = new RegExp(/content\.([^ ]*)/g); 
var newValue = firstString.replace(regex,function(match, group1){ 
    if(group1 === 'size'){ 
     // do something with size here 
     return '12'; 
    } 
    // return key if not handled 
    return group1; 
}); 
console.log(newValue); 

Update:

Как мне кажется, что вопрос заключается в том, чтобы динамически обновлять размер и цена здесь еще один полный пример.

var data = {size : "12", price : "$ 15.99"}; 
var firstString = "$content.size | price: $content.price" 
var regex = new RegExp(/\$content\.([^ ]*)/g); 
var newValue = firstString.replace(regex,function(match, group1){ 
    if(group1 in data){ 
     return data[group1]; 
    } 
    // return key if no data present 
    return group1; 
}); 
console.log(newValue); 

Надеюсь, это станет более ясным.

+0

Интересно, что на самом деле может работать. 'if' утверждение не будет строгим, хотя, поскольку === 'size' может быть чем угодно. но у меня есть решение для этого уже. Но эта функция именно то, о чем я думал! БЛАГОДАРЯ! У вас вопрос правильный !!!! – artsmc

+0

Это часть, которая на самом деле не стала ясной, очевидно, что вы можете использовать group1 для доступа к свойствам объекта динамически или тому подобное. – SGD

+0

да, так было бы: ' if (group1 === [prop]) { return [dynamicstuff]; } ' – artsmc