诸如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/

10-11 11:20