grunt-version 中的正则表达式

Regex in grunt-version

我正在尝试使用 grunt-version 来提升我的 PHP WordPress 插件项目的版本。试了好久都失败了

在我的插件文件中 example.php 我有一个 PHP 变量表示项目版本:

public $version = '0.3.4';

我需要匹配字符串,这样我也可以在这里修改版本。

我试过了:

prefix: 'public\s$version\s='

从 regex101.com 开始,它完全匹配字符串。版本号部分完全由grunt插件处理。

但是 grunt version::patch 说:

Pattern not found in file
Path: example.php
Pattern: /(publics$versions=s)([0-9a-zA-Z\-_\+\.]+)/g

所以我将模式修改为:

prefix: 'public/\s$version/\s=/\s'

但不匹配:

Pattern: /(public\/s$version\/s=\/s)([0-9a-zA-Z\-_\+\.]+)/g

尽管如此,以下模式在同一个文件中工作正常:

prefix: 'Version:\s+'

并且在插件中很好地提升了版本 header:

Version: 0.3.4

所以我尝试了:

prefix: 'public $version =\s+'

但运气不好:

Pattern: /(public $version =\s+)([0-9a-zA-Z\-_\+\.]+)/g

仅供参考,我的 Gruntfile 声明如下所示:

version: {
    pluginVersion: {
        options: {
            prefix: 'Version:\s+'
        },
        src: [
            'example.php'
        ]
    },
    pluginVariable: {
        options: {
            prefix: 'public $version =\s+'
        },
        src: [
            'example.php'
        ]
    },
    packageJson: {
        src: [
            'package.json'
        ]
    }
},

编辑

不用说,默认模式 ('[^\-]version[\'"]?\s*[:=]\s*[\'"]') 也在更改一些不需要的版本。喜欢:

public $wp_version = '0.3.0';

可以用这个正则表达式来匹配:public\s?$version\s?=\s?'

(public\s+\$version\s+=\s+\' 转义)

Demo

对于那些希望将其与 style.css and/or 插件文件一起使用的人:

version: {
   project: {
     options: {
       release: 'patch',
       prefix: '\s*([^\w][\'"]?[v|V]{1}ersion[\'"]?\s*[:=]\s*[\'"]?)'
     },
     src: ['package.json', 'style.css']
   }
}

确保您注册了您的任务(根据文档)

grunt.loadNpmTasks('grunt-version');

然后你可以运行这样的任务

grunt version