我试图在等号后获取值,它的作用但是我得到重复的值,这里的任何想法都错了吗?
// 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);
答案 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)。 数组中的第一项是完全匹配,其余项匹配带括号的子字符串。