使用RegEx构造函数属性的短名称代替冗长的名称有什么好理由?

时间:2013-04-02 15:00:12

标签: javascript regex

我正在学习JavaScript(使用专业Javascript for Web Developers [1]),我想知道为什么开发人员可能会使用RegExp中的短名称而不是更具语义意义的详细名称(即“$ _”而不是input或“$`”而不是leftContext)?

在我需要查找短名称的时候(甚至,我认为,代码完成),我可以轻松输入详细的名称。但是,如果它们很重要,我不想把它们搞砸,为什么程序员更喜欢短名称?

谢谢。

编辑:

一些背景。在本书中给出了以下示例:

var text = "this has been a short summer"; 
var pattern = /(.)hort/g; 

 if (pattern.test( text)){ 

   alert( RegExp.input);                     // this has been a short summer 
   alert( RegExp.$_);                        // this has been a short summer 

   alert( RegExp.leftContext);               // this has been a 
   alert( RegExp.["$`"]);                    // this has been a 

   alert( RegExp.rightContext);              // summer 
   alert( RegExp.["$'"]);                    // summer 

   alert( RegExp.lastMatch);                 // short 
   alert( RegExp.["$&"]);                    // short 

   alert( RegExp.lastParen);                 // s 
   alert( RegExp.["$+"]);                    // s 

  }

如果即使这些详细的表格都被弃用了,那么我想我的问题会略有不同(“如果没有它们,你怎么能完成这些任务?”)。

1:Zakas,Nicholas C.(2011-12-20)。适用于Web开发人员的专业JavaScript。约翰威利和儿子。

3 个答案:

答案 0 :(得分:0)

他们拥有以前的模式,因为我相信它们在其他语言中是如此(例如Perl),所以如果你的背景是用不同的语言,就会有这种熟悉感。

它们只能用于替换字符串,例如"ABC".replace(/[ABC]/g, "$&")

答案 1 :(得分:0)

为了解释Perl Camel book,有些情况下你想强调“快速和肮脏”并节省开发时间,以及你想要强调可维护性的情况。如果你只是需要一个快速的黑客来完成工作,那么无论你设法记住什么而不查找它比你通常想要编写的漂亮,人类可读,自我记录的代码更快。要解释一个different adage,对于第一个原型,你打算一旦你能够使基本流程正常工作就回来并打磨,你想要“努力工作”,然后再努力“正确”。< / p>

(这种推理当然容易回来并咬你的背后,但这仍然是推理。)

答案 2 :(得分:0)

看起来RegExp.["$`"]RegExp.["$'"]已经过时&#34;死了&#34;,而RegExp.$+RegExp.$&的行为却出乎意料。

当前(2015年4月30日)输出:

RegExp.input :这是一个短暂的夏天 RegExp。$ _ :这是一个短暂的夏天 RegExp.leftContext :这是一个 RegExp.rightContext :夏天
RegExp.lastMatch :短期 0
RegExp.lastParen :s
RegExp。$ + :undefinedNaN

这是一个实时测试:

&#13;
&#13;
var text = "this has been a short summer"; 
var pattern = /(.)hort/g; 



 if (pattern.exec(text) != null) {

   document.getElementById("res").innerHTML += "<b>RegExp.input</b>: " + RegExp.input + "<br />";               // this has been a short summer 
   document.getElementById("res").innerHTML += "<b>RegExp.$_</b>: " + RegExp.$_ + "<br />";                  // this has been a short summer 
   
   document.getElementById("res").innerHTML += "<b>RegExp.leftContext</b>: " + RegExp.leftContext + "<br />";       // this has been a 
   //document.getElementById("res").innerHTML += RegExp.["$`"] + "<br />";            // this has been a, now, does not let compile

   document.getElementById("res").innerHTML += "<b>RegExp.rightContext</b>: " + RegExp.rightContext + "<br />";    // summer 
   //document.getElementById("res").innerHTML += RegExp.["$'"] + "<br />";           // summer, now, does not let compile

   document.getElementById("res").innerHTML += "<b>RegExp.lastMatch</b>: " + RegExp.lastMatch + "<br />";           // short 
   document.getElementById("res").innerHTML += "<b>RegExp.$&</b>: " + RegExp.$& + "<br />";                  // was "short", now, evaluates the expression on the right to 0

   document.getElementById("res").innerHTML += "<br /><b>RegExp.lastParen</b>: " + RegExp.lastParen + "<br />";          // s 
   document.getElementById("res").innerHTML += "<b>RegExp.$+</b>: " + RegExp.$+ + "<br />";                 // was "s", now, outputs "NaN"

  }
&#13;
<div id="res" />
&#13;
&#13;
&#13;