我有一段长字符串如下:
/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>')