仅限制表符中的匹配编号

时间:2016-08-09 12:50:04

标签: javascript regex

Sublime Text,Atom或Visual Studio Code等编辑器的代码段可以包含制表位。这些制表符标有美元符号后跟数字(例如$1),除非它们包含用大括号括起来的占位符文本(例如${1:placeholder text})。我尝试在JavaScript中匹配这些制表符的数字:

str = "Match $1 and ${2:yay} then ignore 3 and match $4 again" 
re  = /(?:\${?)\d+/g
arr = str.match(re)

我希望结果数组只包含整数,而它看起来像这样:["$1", "${2", "$4"]

如何才能获取数字,同时忽略所有不属于制表位的数字(例如上面str中的3)

1 个答案:

答案 0 :(得分:1)

非捕获组 (?:\${?)不会使String#match忽略该匹配的一部分。

在您需要保留的模式周围使用捕获论坛 - /\${?(\d+)/g - 并在循环中运行exec以获取捕获的值:



var str = "Lorem $1 ipsum ${2:yay} ignore 3 and so forth $4" ;
var re  = /\${?(\d+)/g;
var arr = [];
while((m=re.exec(str)) !== null) {
  arr.push(m[1]);
}
console.log(arr);