JavaScript Regex三元字符串

时间:2014-11-04 16:08:31

标签: javascript regex angularjs grunt-usemin

我使用grunt usemin和filerev与uglify一起使用版本化的静态资源。

在我们遇到if / else运算符

的案例之前,JS文件中的角度HTML模板替换效果很好
if($scope.isPdf){
    $scope.templateUrl = '/views/results/breakdown-detailed.html';
} else {
    $scope.templateUrl = '/views/results/breakdown.html';
}

在uglify之后将事物转换为单行三元运算符

$scope.templateUrl=$scope.isPdf?"/views/results/breakdown-detailed.html":"/views/results/breakdown.html"}}

现在,用于替换的目标模板字符串的正则表达式不会长时间捕获所有的html案例

/templateUrl\s?[:=]\s?['"]([^"']+)["']/gm

有人会有正则表达式来覆盖两个值的三元情形吗?

如果它还可以覆盖单个正则表达式中的原始案例,那就太棒了。

$ scope.templateUrl = $ scope.isPdf" /views/results/breakdown-detailed.html":" /views/results/breakdown.html"}}

if($scope.isPdf){
    $scope.templateUrl = '/views/results/breakdown-detailed.html';
} else {
    $scope.templateUrl = '/views/results/breakdown.html';
}

我会在regexr中测试以试用它。

1 个答案:

答案 0 :(得分:0)

使用表单的正则表达式

templateUrl(([^?]*)\?([^:]*):([^;]*)|(\s*=\s*)[^;]*)

会捕获任何后跟templateUrl

的内容

例如,请参阅http://regex101.com/r/hD4wU7/1有关正则表达式匹配的方法。

<强>解释

  • templateUrl匹配templateUrl

  • ([^?]*)\?([^:]*):([^;]*)匹配三元运算符

    • ([^?]*)\?匹配?以外的任何内容,后跟问号

    • ([^:]*):匹配:后跟:

    • 以外的任何内容
    • ([^;]*)匹配;

    • 以外的任何内容
  • (\s*=\s*)[^;]*)符合if案例。

    • (\s*=\s*)匹配=
    • [^;]*)匹配;
    • 以外的任何内容