用于匹配字符串结尾的正则表达式模式

时间:2017-11-03 12:44:15

标签: javascript regex

我正在寻找正好在第一个字符串结尾之后匹配的正则表达式字符串(没有尾部斜杠或空格)

https://domain/a/ab
https://domain/a/cd/

这样我就可以在它的末尾添加一个参数,所以像这样:

https://domain/a/ab&安培;字母=真

到目前为止,我已经提出了这一点,但它只匹配字符串的最后一个字符,这不是我想要的

(?!https:\/\/domain\/.*?)(.)$

感谢任何帮助或建议。

2 个答案:

答案 0 :(得分:1)

基于你的问题,我将做一些假设:

  • 您有一个包含网址的多行字符串。
  • 您希望根据路径
  • 将查询字符串参数附加到每个参数

正则表达式捕获每行的最后一个字符

到目前为止,你已经尝试使用正则表达式来匹配每一行的最后一个字符,我认为这不会帮助你完成你正在寻找的东西。在任何情况下,当有多行字符串时,您可以使用flags gm。 来自mozilla:

  

g:全球比赛;找到所有比赛而不是在第一场比赛后停止

     

m:多行;将开始和结束字符(^和$)视为多行(即匹配每行的开头或结尾(由\ n或\ r分隔),而不仅仅是整个输入字符串的开头或结尾)< / p>

使用这些标志,一个简单的表达式/(.)$/gm捕获每一行的最后一个字符。

正则表达式捕获每个URL

根据我所做的假设,我认为你最好抓住网址并映射它们:

/^https?:\/\/[^\/]+(\/?.*)$/gm 此正则表达式匹配每行的URL,并捕获域后的路径。

你提到你使用的是javascript,所以这是一个演示:

const regex = /^https?:\/\/[^\/]+(\/?.*)$/gm;
const str = `https://domain/a/ab
https://domain/a/cd/
https://domain/
http://domain
`;
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}`);
    });
}

答案 1 :(得分:0)

如果要将该文本附加到原始字符串,可以执行以下操作:

var string = "https://domain/a/ab\nhttps://domain/a/cd/";
string = string.replace(/^(.*)(\n.*)/, "$1&letters=true\n$2");
console.log(string);