正则表达式从给定字符串中获取文本的某些部分

时间:2017-05-27 09:43:45

标签: javascript html regex

我正在学习正则表达式,我希望实现类似这样的东西

我有一个字符串如下

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

2 个答案:

答案 0 :(得分:0)

您可以直接匹配“& productid =”,但其余部分是可变的。要匹配任何单词字符,请使用“\ w +”('+'匹配至少一个或多个),例如“& productid = \ w +”。 '&安培;'将不会匹配,因为它是一个特殊的charachter。 '\ w'只需要[a-zA-Z0-9]

所以最终的正则表达式是:& productid = \ w +

Live Example

这将符合您的需要。请记住,这只是一种方式,也可以有其他正则表达式来获得相同的结果。

答案 1 :(得分:0)

这样做:&productid=.*?(?=[&\n]|$)

Live Regex Demo

  • &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}`);
    });
}