js正则匹配替换问题

我有一段长字符串如下:

/a/b/a: xxxxxxxxxxxxxxxxx \r\n /a/b/b: cccccccccccccc  \r\n /a/b/c: cccccccccccccc

现在我想匹配所有以 '/' 开头,以':' 结尾的字符串,转换成如下格式,在所有匹配到的字符串外包一层a标签

/a/b/a: xxxxxxxxxxxxxxxxx \r\n /a/b/b: cccccccccccccc  \r\n /a/b/c: cccccccccccccc

该如何写正则?

是这样吗?

let str = "/a/b/a: xxxxxxxxxxxxxxxxx \r\n /a/b/b: cccccccccccccc  \r\n /a/b/c: cccccccccccccc";
str.match(/\/[^:]+:/g).forEach(m=>str=str.replace(m,'<a>'+m+'</a>'));
console.log('res',str);

控制台输出结果:

res <a>/a/b/a:</a> xxxxxxxxxxxxxxxxx 
 <a>/a/b/b:</a> cccccccccccccc  
 <a>/a/b/c:</a> cccccccccccccc

```

该回答引用ChatGPT
你可以使用以下正则表达式来匹配所有以 '/' 开头,以':' 结尾的字符串:

/\/\w+\/\w+:.*?:/g

其中:

/ 是正则表达式的起始符号
/ 表示匹配字符 '/'
\w+ 表示匹配一个或多个字母、数字或下划线字符
/ 表示匹配字符 '/'
\w+ 表示匹配一个或多个字母、数字或下划线字符
: 表示匹配字符 ':'
.*? 表示匹配任意字符,包括换行符,但是尽可能少匹配,以避免匹配过多
: 表示匹配字符 ':'
/g 表示全局匹配,即匹配所有符合条件的字符串,而不是只匹配第一个
你可以使用 JavaScript 的 replace 方法来将匹配到的字符串替换成带有 a 标签的字符串,代码如下:


const str = '/a/b/a: xxxxxxxxxxxxxxxxx \r\n /a/b/b: cccccccccccccc  \r\n /a/b/c: cccccccccccccc';

const regex = /\/\w+\/\w+:.*?:/g;

const result = str.replace(regex, '<a>$&</a>');

console.log(result);

其中:

$& 表示匹配到的字符串本身
分别表示 a 标签的开始和结束标签
运行上述代码,输出结果如下:

<a>/a/b/a: xxxxxxxxxxxxxxxxx :</a> 
<a>/a/b/b: cccccccccccccc  :</a>  
<a>/a/b/c: cccccccccccccc</a>

可以看到,所有匹配到的字符串都被包裹在了 a 标签中


'/a/b/a: xxxxxxxxxxxxxxxxx \r\n /a/b/b: cccccccccccccc  \r\n /a/b/c: cccccccccccccc'.replace(/(\/[^\s\r\n]+:)/gi,'<a href="$1">$1</a>')

img