Javascript 简化正则表达式:避免测试和替换

Javascript 简化正则表达式:避免测试和替换,javascript,php,regex,Javascript,Php,Regex,我需要一个PHP和JavaScript中的函数,在标题中添加一个括号中的年份。但是,如果标题包含一个括号中的单词,年份和单词应该共享括号,用“/”分隔 目前,我检查一个模式,如果匹配就替换,如果不匹配就做其他事情。该功能能否简化为更简单(最好是单一)的操作?请提供一个完整的例子 PHP: JavaScript: function foo(title, year) { var pattern = /(\()([A-Z]+\))$/; if(pattern.test(title))

我需要一个PHP和JavaScript中的函数,在标题中添加一个括号中的年份。但是,如果标题包含一个括号中的单词,年份和单词应该共享括号,用“/”分隔

目前,我检查一个模式,如果匹配就替换,如果不匹配就做其他事情。该功能能否简化为更简单(最好是单一)的操作?请提供一个完整的例子

PHP:

JavaScript:

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

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

1-检查$title内是否有括号。
如果为TRUE,只需使用函数进行简单的搜索/替换。搜索
”(“
替换为
”($yaer/”

这只会将年份和斜线添加到您准备好的字符串中

2-如果没有括号,只需
$title=“$title($year)”;

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

同样的逻辑也适用于Javascript是的,有一个更简单的方法

1-检查$title内是否有括号。
如果为TRUE,只需使用函数进行简单的搜索/替换。搜索
”(“
替换为
”($yaer/”

这只会将年份和斜线添加到您准备好的字符串中

2-如果没有括号,只需
$title=“$title($year)”;

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

同样的逻辑也适用于Javascript,使用replace可能会更容易一些

PHP

<?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);

?>

可以说,使用replace会更容易一些

PHP

<?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);

?>

在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;
    })
  }

在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;
    })
  }

使用
indexOf(“(”)
?你是在追求速度?还是在追求更少的代码字节?更少的代码字节。或者主要是为了摆脱if/else。但不要以过于复杂的正则表达式为代价。只要我缺少一种简单而出色的方法。使用
indexOf(“(”)
?你是在追求速度?还是在追求更少的代码字节?更少的代码字节。或者主要是为了摆脱if/else。但不是以一个过于复杂的正则表达式为代价。只是如果我缺少一个简单、出色的方法。这是错误的。这一年应该在单词之前。除此之外,这是一个很好的简化,但是,我希望有一种方法不涉及if/else。这是不正确的。年份应该在单词之前。除此之外,这是一种很好的简化,但是,我希望有一种方法不涉及if/else。标题的主要部分也可以包含括号,因此只有包含单个大写单词的后括号才应该包含标题的主要部分也可以包含括号,因此只能修改包含单个大写单词的后括号。