我正在学习正则表达式,我希望实现类似这样的东西
我有一个字符串如下
1. https://www.example.com/abc23?xyz&mnop=12ab&productid=qwerty123
2. https://www.example.com/abc23?xyz&mnop=12ab&productid=hai456&someAlphaNumeric=0987
3. https://www.example.com/abc23?xyz&mnop=12ab&productid=bye789&asdf=0987
现在我想获得包括'&'在内的productid参数来自网址。
这是预期的输出
1. &productid=qwerty123
2. &productid=hai456
3. &productid=bye789
答案 0 :(得分:0)
您可以直接匹配“& productid =”,但其余部分是可变的。要匹配任何单词字符,请使用“\ w +”('+'匹配至少一个或多个),例如“& productid = \ w +”。 '&安培;'将不会匹配,因为它是一个特殊的charachter。 '\ w'只需要[a-zA-Z0-9]
所以最终的正则表达式是:& productid = \ w +
这将符合您的需要。请记住,这只是一种方式,也可以有其他正则表达式来获得相同的结果。
答案 1 :(得分:0)
这样做:&productid=.*?(?=[&\n]|$)
&productid=
将与确切的文字相匹配& productid = .*?
将匹配除了换行符之外的任何内容(也称为最少的字符)(?=[&\n]|$)
是&
符号,新行或字符串结尾的正向预测const regex = /&productid=.*?(?=[&\n]|$)/g;
const str = `
https://www.example.com/abc23?xyz&mnop=12ab&productid=qwerty123
https://www.example.com/abc23?xyz&mnop=12ab&productid=hai456&someAlphaNumeric=0987
https://www.example.com/abc23?xyz&mnop=12ab&productid=bye789&asdf=0987`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}