AngularJS 1中如何用正则等替换字符串内的##为锚标签对
嘿,这个需求不难搞定,我给你两种实用的实现思路,你可以根据自己的习惯选:
方法一:正则表达式替换
这种方法最简洁,利用正则的捕获组精准匹配第一对##及其中间的内容,然后替换成你想要的a标签:
var string = "Hello World, ##How are you##, Today, i am fine"; // 非贪婪匹配第一对##之间的内容,避免误匹配后续的## var result = string.replace(/##(.*?)##/, "<a href='javascript:void(0)'>$1</a>"); console.log(result); // 输出:Hello World, <a href='javascript:void(0)'>How are you</a>, Today, i am fine
这里的正则/##(.*?)##/解释下:
##:匹配开头的两个#(.*?):非贪婪模式捕获中间的所有内容(加?是为了确保只匹配到第一个闭合的##,不会把后面的内容也吞进去)$1:指代捕获到的中间内容,替换时用它来填充a标签的内容
方法二:字符串拆分拼接
如果你对正则不太熟悉,用字符串的split和join方法更直观,逻辑也清晰:
var string = "Hello World, ##How are you##, Today, i am fine"; var parts = string.split('##'); // 先判断是否存在至少一对##,避免报错 if (parts.length >= 3) { // 拼接成目标字符串:前半部分 + 开头标签 + 中间内容 + 结尾标签 + 剩余部分(保留原有的##) var result = parts[0] + "<a href='javascript:void(0)'>" + parts[1] + "</a>" + parts.slice(2).join('##'); } else { // 如果没有足够的##,直接返回原字符串 var result = string; } console.log(result); // 输出和上面一致
这种方法的好处是逻辑直白,而且如果原字符串后面还有其他##,会完整保留,不会被误替换。
内容的提问来源于stack exchange,提问作者Deepak saini
相关产品推荐
相关产品推荐

