简化RegEx:避免测试和替换

时间:2017-03-14 15:36:55

标签: javascript php regex

我需要一个PHP和JavaScript函数,它会在标题中添加括号。但如果标题中包含带括号的单词,则年份和单词应共享括号,用“/".

分隔
foo("Ferrari (ABC)", 2016); // Ferrari (2016/ABC)
foo("Ferrari", 1979);       // Ferrari (1979)
foo("X(Y)Z (PQR)", 1987);   // X(Y)Z (1987/PQR)

目前,我检查一个模式,如果匹配则替换,如果不匹配则执行其他操作。这个功能可以简化为更简单(最好是单个)的操作吗?请提供一个完整的例子。

PHP:

function foo($title, $year) {
  $pattern = "/(\()([A-Z]+\))$/";
  if(preg_match($pattern, $title))
    $title = preg_replace($pattern, "${1}".$year."/${2}", $title);
  else
    $title = "$title ($year)";
}

JavaScript的:

function foo(title, year) {
  var pattern = /(\()([A-Z]+\))$/;
  if(pattern.test(title))
    title = title.replace(pattern, "$1"+year+"/$2");
  else
    title = title + " (" + year + ")";
}

3 个答案:

答案 0 :(得分:0)

是的,有一个更简单的方法。

1-检查$ title中是否有括号 如果为TRUE,则只需使用函数str_replace进行简单搜索/替换。搜索"("替换为"($yaer/"
这只会将年份和斜线添加到您准备好的字符串中。

2-如果你没有括号,那么只需$title = "$title ($year)";

function foo($title, $year) {
 if ( strpos($title,"(") > 1 )
   $title = str_replace("(","($year/",$title);
 else
   $title = "$title ($year)";
}

Javascript的逻辑相同

答案 1 :(得分:0)

可以说,使用替换会更容易一些。

<强> PHP

FCC_DATE=`sqlplus -silent "$USER_NAME"/\"$SCHEMA_PASSWD"@"$SID"<<ENDSQL`

<强>的JavaScript

<?php

function foo($title, $year) {
    if (substr($title,-1) == ")") {
        return str_replace(")","/".$year.")",$title);
    } else {
        return $title . " (" . $year . ")";
    }
}

echo foo("My Title (ABC)", 1996);
echo "<br />";
echo foo("My Title", 1996);

?>

答案 2 :(得分:0)

在Javascript中使用RegExp的示例:

  function foo(str, year) {
    var re = /(\(([A-Z]+)\))?$/
    return str.replace(re, function(b, b, found) {
      if (found) 
        return '(' + year + '/' + found + ')';
      else 
        return ' ' + year;
    })
  }