假设我要替换
function (foo, bar, some, other) {
用
function (foo:any, bar:any, some:any, other:any) {
重要提示: 我不知道函数可能有多少参数。
它可能会像/function \((\S+),?\) \{/g
那样,但是有不同数量的捕获组,我猜......
是否可以用 Perl风格的RegEx替换所有匹配
P.S。我没有找到基于rexex的解决方案,但我需要完全正则表达式
答案 0 :(得分:3)
您可以使用基于\G
的正则表达式替换单个正则表达式:
use strict;
use warnings;
my $s = 'function (foo, bar, some, other) {';
$s =~ s/(?:\G(?!\A),?|function\s*\()\s*\K(\w+)/$1:any/g;
print $s;
模式详情:
(?:\G(?!\A),?|function\s*\()
- 上一次成功匹配的结束和可选的,
(与\G(?!\A),?
匹配)或(|
)function
子字符串后跟0 +空格,然后是文字(
(与function\s*\(
匹配)\s*
- 零个或多个空格\K
- 匹配重置运算符,丢弃与匹配缓冲区匹配的整个文本(\w+)
- 第1组:一个或多个单词字符。答案 1 :(得分:2)
或许这样吗?
它使用嵌套在另一个替换中的替换。外部的一个找到参数列表,而内部的一个在列表
中的每个参数之后添加:any
use strict;
use warnings 'all';
use feature 'say';
my $s = 'function (foo, bar, some, other) {';
$s =~ s{\bfunction\s*\(\K([^()]+)}{
my $params = $1;
$params =~ s/[^\s,]+\K/:any/gr;
}eg;
say $s;
function (foo:any, bar:any, some:any, other:any) {