繁体   English   中英

用于提取变量名的正则表达式

[英]Regular expression for extracting the variable name

我正在尝试从给定的字符串中提取变量名称,并将其替换为其他字符串。

例如,给定此字符串:

var test1 = 1; var test2 = 2; var test-test = 1 var test_3 = 3;

我需要提取test1test2test-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部分,但我想知道为什么会发生这种情况,我该如何解决这个问题。 我知道()之间的部分通常在正则表达式中匹配,而其他所有部分都是模式的一部分。

我将非常感谢一个很好的解释,我真的想了解更多关于正则表达式的知识

如果查看替换文档,可以添加更多参数以实现所需。

函数的第一个参数'match'是整个匹配的字符串。 跟随正则表达式中的捕获组一样多的附加参数(在您的情况下为1)。

所以你可以改用:

testString.replace(/var ([a-zA-Z0-9_-]{1,})/g, function (match, captureOne) {
    return captureOne;
});

是你小提琴一个分支

您可以使用以下方法稍微修改代码:

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个或多个匹配。

的jsfiddle

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; 

演示: http//jsfiddle.net/jfriend00/93ZHA/

如果你只想要你的组,只需获得第一个“ 括号子匹配 ”,这是回调函数的第二个参数:

testString.replace(/var ([a-zA-Z0-9_-]{1,})/g, function (match, p1) {
    console.log(p1);
});

打印:

test1
test2
test-test
test_3 

MDN上记录了替换功能

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM