2014-09-27 2 views
0

Я пытаюсь получить 00-8.Получить строку из другой строки с совпадением()

Почему этот код не возвращает мне 00-8?

<script> 

    var pageDetailsSecond = "a='00-8'b='13-'a+='00-2'b+='3333'c='4'"; 

    var phone1 = pageDetailsSecond.match("a='(.*)'"); 
    var phone1 = phone1[0]; 

    var card_Phone = phone1; 

    alert(card_Phone); 

</script> 

На самом деле я получаю a='00-8'.

+0

Потому что вы пытаетесь соответствовать включает в себя = ... – Pieter21

+0

проверить мои несколько более полное ответ ниже – Pieter21

ответ

0

Потому что вы пытаетесь соответствовать включает в себя = ....

Но когда вы найдете его, вы можете лишить его от матча найден.

Проверено с jsfiddle: http://jsfiddle.net/pbo5x9dx/

var pageDetailsSecond = "a='00-8'b='13-'a+='00-2'b+='3333'c='4'"; 
alert(pageDetailsSecond) 

var phones = pageDetailsSecond.match("a='(.*?)'"); 
var phone1 = phones[1];  
alert(phone1) 

** редактировать: ** исправление не жадный матч, проверенный с http://jsfiddle.net/pbo5x9dx/1/

+0

Хорошо, но если моя строка следующая, она не работает: 'a = '00 -8'b = '13 -'a + = '00-2'b + =' 3333'c = '4''. – roberto

+0

, тогда вам нужен не-жадный матч с *? iso * – Pieter21

0

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

Содержимое массива будет:

[ 
    [0] = "a='00-8'", 
    [1] = '00-8' 
] 

Что вы хотите phone1[1] вместо phone1[0], который содержит только часть матча, указанной вашей группой захвата (.*).


на основе обновленного вопроса, шаблон регулярного выражения должен быть изменен на:

"a='(.*?)'" 

По умолчанию, регулярные выражения пытаются соответствовать как можно больше (известный как «жадный»). Картина говорит «матч любое количество любых символов между ' символов. Это теперь включает 00-8'b='13-'a+='00-2'b+='3333'c='4. Добавляя ?, это изменяет поведение„ленивым“. Другими словами, матч, как мало насколько это возможно, и ваше регулярное выражение возвращается к сопоставлению только 00-8, как и раньше.

+0

Хорошо, но если моя строка следующая, она не работает: 'a = '00 -8'b = '13 -'a + = '00-2'b + =' 3333'c = '4''. Или если это еще одна вещь после ... – roberto

+0

Предполагая, что вы все еще хотите сопоставить цитированное содержимое после 'a =', тогда вы должны изменить свое регулярное выражение. См. Мой обновленный ответ. – md4