我正在学习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。约翰威利和儿子。
答案 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
这是一个实时测试:
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;