诸如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) 最佳答案
非捕获组(?:\${?)
不会使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);
关于javascript - 匹配号码仅在制表位中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38851254/