2014-11-19 3 views
-4

У меня есть эта строка = rgb (192, 194, 194) -10px -10px 0px; Мне нужно получить первый -10px в этой строке и сохранить как переменную. Это число динамическое и изменится.Как получить значение по определенному индексу В JavaScript?

Спасибо за помощь. Вот что у меня есть. Я хватаю текстовую тень пролета и должен получить значение -10px, которое будет добавлено в всплывающую подсказку. Это динамическое число, которое будет меняться в зависимости от того, где пользователь нажимает на слайдер. Я просто не могу понять, как разбирать эту строку, чтобы получить значение -10px.

$('.slider-track.shadow').on('click', function (e) { 
     e.preventDefault(); 
     var currentValue = $('.editing').find('span').css('text-shadow'); 
     var replaceValue = currentValue.replace(/\D/g, ''); 

     console.log(currentValue); 
     $('.tooltip-inner.shadow').text(currentValue); 
    }); 
+2

Показать ваши усилия и проблемы. – DontVoteMeDown

+1

Это довольно соблазнительно закрыть это как дубликат [Учебники для написания парсера с Javascript] (http://stackoverflow.com/questions/5874609/tutorials-for-writing-a-parser-with-javascript) – Quentin

ответ

2

Это регулярное выражение должно делать трюк.

var str = "rgb(192, 194, 194) -10px -10px 0px;"; 
var m = str.match(/(.[^)][^\s]*)+\s(.*)+\s/); 

if ((m instanceof Array) && m[1]) { 
    console.log(m[1].trim()) // '-10px' 
} 
+0

Очень чистый. Хороший подход. –

+0

Вы мужчина. Спасибо за помощь – user1525766

0

Здесь вы идете.

var stringToUse = "rgb(192, 194, 194) -10px -10px 0px", 
start = stringToUse.lastIndexOf(')'), 
end = stringToUse.indexOf('px'); 

stringToUse = stringToUse.substring(start +1, end).trim(); 

//outputs "-10" 

Надеюсь, это поможет.

Обновление с вопроса.

var stringToUse = "rgb(192, 194, 194) 0 -10px 0px", 
start = stringToUse.lastIndexOf(')') + 1, 
end = stringToUse.slice(start).trim().indexOf(" "); 
stringToUse = stringToUse.slice(start).trim() 
stringToUse.slice(0, end) 

Это работает лучше или вы можете использовать Reg Expressions, как и другой ответ.

+0

'rgb (192, 194, 194) 0 -10px 0px' А теперь? – Jonathan

+0

Обновленная версия обрабатывает оба сценария. Можно немного почистить, но это работает. –

0

Use Regexp match. Вы можете найти больше на RegExp doc

var x = "rgb(1,2,3) 0px 10px -20px" 
var y = x.match(/\) ([+-]?[0-9]*px)/) 
var z = x.match(/\) ([+-]?[a-z]*px)/) 
console.log("original=",x,"; good match=",y,"; no match=",z) 
//prints 
original= rgb(1,2,3) 0px 10px -20px ; good match= [") 0px", "0px"] ; no match= null 

HTH. RegExp может сделать намного больше для вас.

0

Вот регулярное выражение пример с некоторыми пояснениями:

var str = "rgb(192, 194, 194) -10px -10px 0px;"; 
var results = str.match(/.*\)\s?([^\s]*)/); 

console.log(results); // ["rgb(192, 194, 194) -10px -10px 0px;", "-10px"] 

Чтобы разбить его:

  • *) Матчи всё, вплоть до первого ")" он видит.
  • \ s? Опционально будет соответствовать пустое пространство.
  • ([^ \ s] *) /) Будет соответствовать всем до тех пор, пока не будет исключено следующее пустое пространство, которое он видит. Это помещено в группу захвата

Это онлайн-приложение regex here лучше иллюстрирует вышесказанное.

+0

Спасибо за помощь всем. Я ценю быстрые ответы. – user1525766

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