我有一个像
这样的富文本Sample text for testing:<a href="http://www.baidu.com" title="leoshi">leoshi</a>leoshi for details balala...
Welcome to RegExr v2.1 by gskinner.com, proudly hosted by Media Temple!
我想要匹配的是单词leoshi
,但不在<a>
元素内部,所以在此示例中,leoshi
中只有leoshi for details....
< / p>
欢迎提出解决方案和解释!
答案 0 :(得分:1)
旨在处理此类&#34;找到一个单词但不是特定上下文的技巧&#34;案例描述如下:http://www.rexegg.com/regex-best-trick.html。
本质上它是:在不受欢迎的上下文中匹配你的单词,或者(使用交替)只在这个单词中匹配,但是在捕获组中。然后分析捕获。
你的案例中的正则表达式是:
<a.*?>.*leoshi.*<\/a>|(leoshi)
演示:https://regex101.com/r/zO0tV2/1
然后你需要检查捕获:
var input = "...";
var pattern = /<a.*?>.*leoshi.*<\/a>|(leoshi)/;
var match = pattern.exec(input);
var inputMatches = match !== null && match[1] !== null;
答案 1 :(得分:0)
我使用积极的lookbehind来开始匹配 AFTER 结束标记</a>
。然后,当leoshi
用作单独的单词时,将(?<=<\/a>).*?\b(leoshi)
与括号匹配。
正则表达式:action
答案 2 :(得分:-1)
最好的方法(使用正则表达式)将首先删除所有标记,然后检测剩余字符串中的单词。例如:
var str_without_links = str.replace(/<a\b.*?<\/a>/, '')
str_without_links.match(/leoshi/)
如果您需要保留字符串长度(与原始字符串对应),请考虑使用占位符代替原始标记。
var str_without_links = str.replace(/<a\b.*?<\/a>/, function(s) { return s.replace(/./g, ' ') })