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)
答案 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);