用正则查找文本 前面或者后面一个字符不是某个指定的字符
正则玩得好,可以省去不少的事儿,而且用起来舒服,没那么多弯弯绕绕的,刚刚就碰到一个问题,替换一段文本,根据排版需要,链接前面和后面都需要一个空格,但是编辑器会自动识别添加链接,贴的源代码里面也是,如果加上空格反而不对了。
前一个字符不是某个字符
可以使用负向零宽断言来实现,在正则表达式中,(?<!x)
表示匹配前一个字符不是x的情况,例如:要查找字符串中不是数字的字符,可以使用 (?<![0-9])\w
,其中 (?<![0-9])
表示前一个字符不是数字,\w
表示匹配任意一个字母、数字或下划线。
后一个字符不是某个字符
可以使用否定后行断言来实现该功能。下面是一个示例,找到所有的字母,但字符串后面的字符不是X:
[A-Za-z](?![Xx])
这个正则表达式使用 [A-Za-z]
匹配任何字母,然后使用 (?![Xx])
表示后面的字符不是X或x。
请注意,否定后行断言只匹配前面的字符,不匹配在其后面的字符。因此,在使用这些表达式时,请确保在处理整个字符串之前消耗任何之后的匹配。
我的实现方法
data.content = data.content.replace(/(?<!["'=])<a (.+?)>/gi, ' <a $1>'); data.content = data.content.replace(/<\/a>(?!["'\&\/])/gi, '</a> ');
如果链接的前面是 双引号、单引号、等于号 就不加空格,同样的道理,链接后面如果是 双引号、单引号、右尖括号( >
在编辑器里面是 >
)、斜杠 也不加空格。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 无序数组求中位数
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论