如何在 Peg JS 中编写范围语法
How to write a range syntax in Peg JS
我试图编写语法来验证 1 到 128 之间的数字,但无法在 peg.js 中完成任务,尽管它在与 Javascript 兼容的正则表达式中工作。
正则表达式:^(12[0-8]|1[01][0-9]|[1-9]?[1-9])$
但无法在 peg.js 中复制相同的表达式。
numberRange = l: (rangeRegex) m:(integer*) {
if(m.length !== 0){
l = l + m.join("");
}
return l;
}
rangeRegex = ^(12[0-8]|1[01][0-9]|[1-9]?[1-9])$
我也尝试在 Peg.js 中使用相同的正则表达式,这会抛出 Expected "!", "$", "&", "(", ".", character class, comment, end of the line, identifier, literal, or whitespace but "^" found.
我们无法在 peg.js 中直接匹配正则表达式,但是,我们可以在 peg.js 的谓词中使用正则表达式来验证数字。如果数字与提供的正则表达式不匹配,我们确实有权抛出自定义错误。
numberRange = l: (rangeRegex* ) {
if (l.length > 0) {
l = l.join("");
}
if (l.match('^(12[0-8]|1[01][0-9]|[1-9][0-9]?)$')) {
return l;
} else {
error("The number must be in a range of 1 to 128");
}
}
rangeRegex =[0-9]
以下代码帮助我验证了 1 到 128 范围内的数字。我希望这对其他人也有帮助。
这是另一个没有正则表达式的解决方案:
numberRange = "1" [0-2] [0-8] / [1-9] [0-9] / [1-9]
我试图编写语法来验证 1 到 128 之间的数字,但无法在 peg.js 中完成任务,尽管它在与 Javascript 兼容的正则表达式中工作。
正则表达式:^(12[0-8]|1[01][0-9]|[1-9]?[1-9])$
但无法在 peg.js 中复制相同的表达式。
numberRange = l: (rangeRegex) m:(integer*) {
if(m.length !== 0){
l = l + m.join("");
}
return l;
}
rangeRegex = ^(12[0-8]|1[01][0-9]|[1-9]?[1-9])$
我也尝试在 Peg.js 中使用相同的正则表达式,这会抛出 Expected "!", "$", "&", "(", ".", character class, comment, end of the line, identifier, literal, or whitespace but "^" found.
我们无法在 peg.js 中直接匹配正则表达式,但是,我们可以在 peg.js 的谓词中使用正则表达式来验证数字。如果数字与提供的正则表达式不匹配,我们确实有权抛出自定义错误。
numberRange = l: (rangeRegex* ) {
if (l.length > 0) {
l = l.join("");
}
if (l.match('^(12[0-8]|1[01][0-9]|[1-9][0-9]?)$')) {
return l;
} else {
error("The number must be in a range of 1 to 128");
}
}
rangeRegex =[0-9]
以下代码帮助我验证了 1 到 128 范围内的数字。我希望这对其他人也有帮助。
这是另一个没有正则表达式的解决方案:
numberRange = "1" [0-2] [0-8] / [1-9] [0-9] / [1-9]