这个正则表达式逻辑出了什么问题

时间:2016-01-29 12:00:54

标签: javascript jquery regex

我试图在等号后获取值,它的作用但是我得到重复的值,这里的任何想法都错了吗?

 // Regex for finding a word after "=" sign
 var myregexpNew = /=(\S*)/g;
 // Regex for finding a word before "=" sign
 var mytype = /(\S*)=/g;
 //Setting data from Grid Column
 var strNew = "QCById=20";
 var matchNew = myregexpNew.exec(strNew);
 var newtype = mytype.exec(strNew);
 alert(matchNew);

https://jsfiddle.net/6vjjv0hv/

4 个答案:

答案 0 :(得分:3)

exec返回一个数组,第一个元素是全局匹配,以下是子匹配,这就是为什么你得到["=20", "20"](在这里使用console.log而不是alert会让你更清楚你得到的东西。)

在查找子匹配并使用exec时,您通常会对从索引1开始的元素感兴趣。

关于整个解析,很明显有更好的解决方案,比如只使用一个带有两个子匹配的正则表达式,但它取决于真正的目标。

答案 1 :(得分:1)

您没有获得重复的值,您只需获得匹配值的数组和捕获的文本#1。

请参阅RegExp#exec()帮助:

  

如果匹配成功,exec()方法将返回一个数组并更新正则表达式对象的属性。 返回的数组匹配的文本作为第一项,然后然后将每个捕获括号的一个项目匹配包含捕获的文本。

只需使用[1]索引即可获取捕获的文本。



var myregexpNew = /=(\S*)/g;
 var strNew = "QCById=20";
 var matchNew = myregexpNew.exec(strNew);
 if (matchNew) {
    console.log(matchNew[1]);
 }




要获取=两侧的值,您可以使用/(\S*)=(\S*)/g正则表达式:



var myregexpNew = /(\S*)=(\S*)/g;
var strNew = "QCById=20";
var matchNew = myregexpNew.exec(strNew);
if (matchNew) {
  console.log(matchNew[1]);
  console.log(matchNew[2]);
}




此外,您可能需要添加一项检查以查看捕获的值是否为undefined /空,因为\S*可能会捕获空字符串。 使用/(\S+)=(\S+)/g正则表达式,要求在=符号前后至少显示一个非空白字符。

答案 2 :(得分:1)

您可以尝试不使用这样的正则表达式:



var val = 'QCById=20';
var myString = val.substr(val.indexOf("=") + 1);
alert(myString);




目前exec正在为您返回匹配的值。

答案 3 :(得分:1)

REGEXP.exec(SOMETHING)返回一个数组(参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec)。 数组中的第一项是完全匹配,其余项匹配带括号的子字符串。