分类
js

JavaScript 获取正则表达式中子表达式的个数

正如标题所示,我厂有这么一个需求。我不会,老板鄙视我后丢过来一个链接:stackoverflow: Count the capture groups in a qr regex?

看不太懂 Perl,但是这个思路很棒。所以改写成 JS 版,并记录如下:

function countCapturingGroups(r){
  r = new RegExp(`|${r.source}`);
  const result = ''.match(r);
  return result.length - 1;
}

const result = countCapturingGroups(/fo(.)b(..)/);
console.log(result); // 2

它的原理是这样的。构建一个新正则,包含两部分:空字符和目标正则。空字符正则会完成与目标字符串的匹配,保证有结果(不然的话就会返回 null。接下来 | 会保证后面的正则也是有效的,可以生成包含子表达式结果的数组。

我们知道,结果是个类数组,结构大约是:

  1. 全部匹配字符串
  2. 0~N 子表达式结果
  3. 其它一些属性

所以用其长度 – 1 就能获得子表达式的个数。从功耗上来说,这个应该是很节省了。

分类
perl

在新 Mac 上配置 Perl

最新的 macOS Catalina 10.15.1 自带 Perl 5.18,但是不包含包管理工具 Cpanm,所以要手动安装。

第一步,安装 xcode。

第二步,安装 homebrew

第三步,安装最新 Perl 5.30(没有 Perl 6……)

brew install perl

安装完成之后,需要验证一下当前使用的 perl 路径 perl -v 如果还是 5.18,那么检查一下引用 whereis perl,应该能看到 /usr/local/bin/perl/usr/bin/perl 前面,并且指向 /usr/local/Cellar/perl/{version}/bin/perl,那么就退出当前 Terminal,重新打开,应该就好了。

第四步,安装 Cpanm

brew install cpanm

第五步,安装其它包

cpan install Test::Base
cpan install IPC::Run

分类
perl

Perl 笔记

主要记录在 Windows 下使用 Perl 的经验。

WSL

  1. 内建 Perl 环境

安装

我安装的是 Strawberry 版,没啥好说的,下载安装即可。