我想使用正则表达式匹配字符串的一部分,然后访问带括号的子字符串:
var myString = "something format_abc"; // I want "abc"
var arr = /(?:^|\s)format_(.*?)(?:\s|$)/.exec(myString);
console.log(arr); // Prints: [" format_abc", "abc"] .. so far so good.
console.log(arr[1]); // Prints: undefined (???)
console.log(arr[0]); // Prints: format_undefined (!!!)
我究竟做错了什么?
我发现上面的正则表达式代码没有任何问题:我要针对的实际字符串是:
"date format_%A"
报告“%A”未定义似乎是一个非常奇怪的行为,但与该问题没有直接关系,因此我打开了一个新的代码,为什么匹配的子字符串在JavaScript中返回“未定义”?。
问题在于console.log
它的参数就像一条printf
语句一样,并且由于我正在记录的字符串("%A"
)具有特殊值,因此它试图查找下一个参数的值。
In the code \1 represented matched by first group ([a-z])