如何解释$1元,2元;在JavaScript中使用正则表达式时?
一段JavaScript代码如下所示:如何解释$1元,2元;在JavaScript中使用正则表达式时?,javascript,regex,Javascript,Regex,一段JavaScript代码如下所示: num = "11222333"; re = /(\d+)(\d{3})/; re.test(num); num.replace(re, "$1,$2"); 我无法理解“$1,$2”的语法。该代码来源的书上说,$1表示RegExp.$1,$2表示RegExp.$2。但这些解释引出了更多的问题: 众所周知,在JavaScript中,变量的名称应该以字母或_开头,$1在这里怎么可能是RegExp成员变量的有效名称 如
num = "11222333";
re = /(\d+)(\d{3})/;
re.test(num);
num.replace(re, "$1,$2");
我无法理解“$1,$2”
的语法。该代码来源的书上说,$1
表示RegExp.$1
,$2
表示RegExp.$2
。但这些解释引出了更多的问题:
$1
在这里怎么可能是RegExp成员变量的有效名称
$1
,命令行会说它没有定义;如果输入“$1”
,则命令行仅回显$1
,而不是11222。那么,replace方法如何知道“$1,$2”
的含义呢
.replace()
调用中使用的占位符$n
表示正则表达式的第n个捕获组
var num=“11222333”;
//此正则表达式将最后3位数字捕获为捕获组#2
//和所有前面的数字作为捕获组#1
var re=/(\d+)(\d{3})/;
控制台日志(重新测试(num));
//这个replace调用替换正则表达式的匹配(发生
//将所有内容匹配到第一个捕获组($1),然后是
//逗号,后跟第二个捕获组($2)
console.log(num.replace(re,“$1,$2”))代码>
众所周知,在Javascript中,变量的名称应该以字母或_开头
不,不是<代码>$1
是一个完全有效的变量。但是,您必须首先分配给它:
$variable = "this is a test"
这就是jQuery如何使用名为
$
的变量作为jQuery
对象的别名。您误解了这行代码。您应该考虑字符串<代码>“$ 1,2美元”< /代码> A<强>格式说明符< /强>,该代码由<代码>替换< /代码>函数内部使用,以知道要做什么。它使用先前测试过的正则表达式,该表达式产生了两个结果(两个括号中的块),并重新格式化了结果$1
指第一个匹配项,$2
指第二个匹配项。因此,num
字符串的预期内容在该位代码之后是11222333
。$1是正则表达式的第一组,2是第二组。组由括号定义,所以第一个组($1)是与(\d+)匹配的任何组。您需要对正则表达式进行一些阅读,以了解它与什么匹配
众所周知,在Javascript中,变量的名称应该以字母或1开头,这里$1怎么可能是RegExp的成员变量的有效名称
这不是真的与$1一样是有效的变量名。你只要试一下就可以发现这一点。请参阅jQuery和许多其他框架
这段代码来源的书上说$1表示RegExp.$1,$2表示RegExp.$2
这本书是纸做的。而报纸也无法对抗任何在其上书写的人的抵抗:-)。但也许你只是曲解了这本书的内容
实际上,这取决于上下文
String
的replace()
方法的上下文中,$1
,$2
<代码>$99(1到99)是占位符。它们由replace()
方法在内部处理(它们与RegExp.$1
、RegExp.$2
等无关,这些可能甚至没有定义(请参见第2点)。)。看见将其与未使用标志g
时的返回值进行比较,该返回值与的返回值类似。也与之相比RegExp.$1
,RegExp.$2
RegExp.$9(仅限1到9)是RegExp
的非标准属性。它们似乎是在您的浏览器上实现的,但对于其他人来说,它们无法定义。要使用它们,您需要始终使用RegExp.
预先添加$1
,$2
,等等。这些属性是静态的、只读的,存储在RegExp
全局对象中,而不是单个正则表达式对象中。但是,无论如何,您不应该使用它们。String
的replace()
方法内部使用的$1
到$99
存储在其他地方
祝你今天愉快 当有疑问时,:“替换字符串可以包括以下特殊替换模式…”(
$1
是一种$n
替换模式)。另请参见-JavaScript没有PHP或Perl中的“插值”。您能告诉我这里的“插值”是什么意思吗?在带有插值的语言中,$name=“Fred”;打印“Hello$name!”
可能会导致“Hello Fred!”。教科书对插值的一个定义是“在定点之间插入(某物)”,在计算机语言中,这通常意味着“将变量/表达式的值插入字符串”。JavaScript没有此功能。由于JavaScript中不存在这种情况,因此可以得出结论,“$1,$2”
生成一个由5个字符组成的字符串,并且不会对任何变量的值进行插值-特殊处理来自字符串。replace
函数(我也链接了该函数)。谢谢。但是我的问题(1)是什么呢,RegExt.$1?输入RegExp.$1时,命令行返回11222。所以$1似乎是object RegExt的成员变量。$1怎么可能是变量的名称?@user2384994:如果您的意思是将替换模式替换为RegExp.$1
,那么它应该返回RegExp.11222
。不过,就目前而言,JavaScript变量可以以$
开头。在JavaScript中,$1
后面跟数字(例如。