使用match()从其他字符串中获取字符串

时间:2014-09-27 12:56:15

标签: javascript match

我尝试获取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'

2 个答案:

答案 0 :(得分: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。添加? ,这会将行为更改为“懒惰”。换句话说,匹配为 little ,并且您的正则表达式将恢复为仅匹配00-8

答案 1 :(得分:0)

因为您尝试匹配的内容包括a = ....

但是当你找到它时,你可以从找到的匹配中删除它。

使用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/

进行检查