正则表达式不能容忍缩小文件中的空格

时间:2014-08-17 08:58:33

标签: regex bash sed

我正在升级一个基本上更新版本的bash脚本,并构建提交以标记版本。源代码(javascript)代码在resp not-minified和minified中可能看起来像这样(下):

// not minified
function(){ 
  version = {
    version: '0.0.6',
    build: '%build%'
  };
  // etc

// minified looks like:
function(){version={version:"0.0.6",build:"%build%"};othercode...

在bash脚本中,抓取并更改该内容的行是:

sed -i".$BUILD" -e "s/\(version:[   ]*\)'[0-9. ]*-dev'/\1'$TAG$SUFFIX'/" -e "s/\(build:[    ]*\)'%build%'/\1'$BUILD'/" "$COREFILE"

但正则表达式不能容忍缩小的代码。说实话,我不在javascript和php正则表达式之外,所以我无法理解这一行背后的逻辑以及它是如何构建的。

如果有人可以提供帮助会很棒,我会继续研究以理解这个正则表达式。

1 个答案:

答案 0 :(得分:2)

你有几个问题:

  1. 缩小版使用"代替',而正则表达式仅查找',以使其同时替换'的出现次数在匹配部分中使用[\"']

  2. build 部分即使对于非缩小的部分也不匹配,您在构建号之后寻找字符串-dev,但它不在那里。使用\(-dev\|\)允许-dev或空白。

  3. 命令是:

    sed -i ".$BUILD" -e "s/\(version:[ ]*\)[\"'][0-9. ]*\(-dev\|\)[\"']/\1'$TAG$SUFFIX'/" -e "s/\(build:[ ]*\)[\"']%build%[\"']/\1'$BUILD'/" "$COREFILE"