[英]Regular expression for extracting the variable name
我正在尝试从给定的字符串中提取变量名称,并将其替换为其他字符串。
例如,给定此字符串:
var test1 = 1; var test2 = 2; var test-test = 1 var test_3 = 3;
我需要提取test1 , test2 , test-test和* test_3 *并用其他东西替换它们。
我尝试的是以下模式:
var ([a-zA-Z0-9_-]{1,})
我自己想出了它,从我所知道的关于正则表达式的小东西,据我所知它应该匹配(贪婪)一个以var
开头的字符串,包含字母,小写和大写,以及字符-
和_
。
但是,当我使用replace运行它时,匹配是var name
而不仅仅是name
。
testString.replace(/var ([a-zA-Z0-9_-]{1,})/g, function (match) {
return match;
});
你可以在这里看到一个小提琴: http : //jsfiddle.net/HyBZy/
这本身并不是一件大事,因为我可以简单地从匹配中删除var
部分,但我想知道为什么会发生这种情况,我该如何解决这个问题。 我知道()
之间的部分通常在正则表达式中匹配,而其他所有部分都是模式的一部分。
我将非常感谢一个很好的解释,我真的想了解更多关于正则表达式的知识
您可以使用以下方法稍微修改代码:
var newString = testString.replace(/var ([a-zA-Z0-9_-]{1,})/g, function ($0, $1) {
return $1;
});
诀窍是在这里使用$1
作为返回语句,它与你的正则表达式中的第1组匹配( 已经正确 )但是你可以将它缩短为:
/var ([\w-]+)/g
因为\\w
表示[A-Za-z0-9_]
, +
表示1个或多个匹配。
OUTPUT:
test1
test1
test-test
test_3
这将获得所有变量名称:
var str = "var test1 = 1; var test2=2; var test-test=1; var test_3=3;";
var matches;
var regex = /var\s+(.*?)[\s=].*?;/g;
while (matches = regex.exec(str)) {
console.log(matches[1]);
}
以下是如何替换名称:
var str = "var test1 = 1; var test2=2; var test-test=1; var test_3=3;";
var cntr = 0;
var base = "base";
var output = str.replace(regex, function(match, p1, p2, p3) {
return p1 + base + cntr++ + p3;
});
console.log(output); // generates var base0 = 1; var base1=2; var base2=1; var base3=3;
如果你只想要你的组,只需获得第一个“ 括号子匹配 ”,这是回调函数的第二个参数:
testString.replace(/var ([a-zA-Z0-9_-]{1,})/g, function (match, p1) {
console.log(p1);
});
打印:
test1
test2
test-test
test_3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.