我尝试获取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 :(得分: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/
进行检查