gpt4 book ai didi

javascript - 需要正则表达式帮助 : pattern almost works

转载 作者:行者123 更新时间:2023-12-04 08:14:29 26 4
gpt4 key购买 nike

我需要一些有关 ECMAScript 正则表达式的帮助。我目前使用的正则表达式几乎可以正常工作,但有一个小问题。我需要匹配以下内容:STATSTATS不管情况如何。此外,后面可能有符号和数字。
例子:stats:3-2是一场比赛。stats:5是一场比赛。stats-4是部分匹配,但 '-4' 应该被忽略。
如前所述,我正在使用的当前正则表达式几乎可以正常工作,如下所示:/STAT[S]*(?:(?:[\:](?<method>(\d)))(?:[\-](?<count>(\d)+))*)*/ig此模式使用 regex101,实际上匹配所有条件并忽略以下示例中的 -4:stats-4 , 同时匹配单词 'stats'。
但是,当我尝试在我正在编辑的插件中使用此模式时,就会出现问题。目前只匹配 stat , stats , stat:2 ,但不是 stat:3-2 , stat-4 (它应该匹配 'stat' 但忽略 '-4')。
我知道模式可能有点乱,但我不擅长创建正则表达式。
确切用法(在 atom rpg-dice 插件中):

    roll() {
const editor = atom.workspace.getActiveTextEditor();
const regex = [
/(\+|\-){1}([\d]+)/i,
/([\d]+)d([\d]+)(?:([\+|\-]){1}([\d]+))*/i,
/STAT[S]*(?:(?:[\:](?<method>(\d)))?(?:[\-](?<count>(\d)+))*)*/i
];

if (editor) {
// attempt to select the dice roll
let selection = editor.getSelectedText();
// if the selection failed, try selection another way.
if (selection.length < 1) {
editor.selectWordsContainingCursors();
atom.commands.dispatch(atom.views.getView(editor), 'bracket-matcher:select-inside-brackets');
selection = editor.getSelectedText();
}
// increase size of selection by 1, both left and right. (selects brackets)
let range = editor.getSelectedBufferRange();
let startColumn = range.start.column -1;
let endColumn = range.end.column +1;
editor.setSelectedBufferRange([[range.start.row, startColumn],[range.end.row, endColumn]]);
// trim any whitespace from the selection
selection.trim();

/*
regex pattern matching to determine the
type of roll.
*/
if (matches = selection.match(regex[0])) { // 1d20 roll; attack and ability checks
type = 'check';
} else if (matches = selection.match(regex[1])) { // typically a damage dice roll
type = 'dmg';
} else if (matches = selection.match(regex[2])) { // used for stat generation
console.log(matches);
} else {
console.log('Cannot determine a suitable use.');
}

最佳答案

您可以使用

/STATS?(?::(?<method>\d)(?:-(?<count>\d+))?)?/gi
regex demo .细节:
  • STATS? - STATSSTAT
  • (?::(?<method>\d)(?:-(?<count>\d+))?)? - 一个可选的出现
  • : - 冒号
  • (?<method>\d) - 组“方法”:一位数
  • (?:-(?<count>\d+))? - 一个可选的出现
  • - - 连字符
  • (?<count>\d+) - 组“计数”:一位或多位数字。


  • 关于javascript - 需要正则表达式帮助 : pattern almost works,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65778235/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com