我刚刚开始使用mark.js (https://markjs.io),现在我正试图找到合适的RegEx来捕获尽可能少的数据(非贪婪类型),并且不超过一定数量的字符。
我尝试了多个选项,到目前为止,我有这三个正则表达式,但每个正则表达式都有自己的错误:
w(.{1,30})?3 -捕获'word1 word2 word3 wo rd3',而不是'word3‘和'wo rd3';w(\w{1,30})?3 -按其应有的方式捕获'word3‘,但对于'wo rd3 3’却失败;w((\w| ){1,30})?3 -这与上面的第一个选项完全一样。为了更好地理解,请运行下面的代码。
你觉得我在这里错过了什么拜托?
亚历克斯
var regex = /w(.{1,30})?3/i;
// var regex = /w(\w{1,30})?3/i;
// var regex = /w((\w| ){1,30})?3/i;
var instance = new Mark(document.querySelector("body"));
instance.markRegExp (regex, {
className: "mark"
});.mark {
color: white;
background: red;
}<script src="https://cdn.jsdelivr.net/mark.js/8.8.3/mark.min.js"></script>
<div>word1 word2 word3 wo rd3 word4</div>
发布于 2020-08-01 07:53:51
w(.{1,30})?3-捕获'word1 word2 word3 wo rd3',而不是'word3‘和'wo rd3';
是的,因为.{1, 30}意味着捕获最多30个字符(换行符除外)。因为在第一个w和最后一个3之间只有22个字符,所以它将匹配所有的字符。
w(\w{1,30})?3-它应该捕获'word3‘,但是对于’woRd3‘却失败了;
是的,因为\w只匹配单词字符,而不匹配空格。
w((\w| ){1,30})?3--这与上面的第一个选项完全一样。
是的,因为(\w | )和.几乎完全一样。(.还将匹配\t和其他类型的空格。)
如果您想匹配以w开头以3结尾的任何内容,其中最多有一个空格,则可以使用:
w\w+?(\s\w+?)?3+?表示您正在寻找的“非贪婪”匹配类型。但是,此正则表达式也将与word2 word3匹配。如果以数字结尾的任何内容表示潜在匹配的结束,则可以使用:
w[a-zA-Z]+?(\s[a-zA-Z]+?)?3而且,由于您已经使用了/i标志,所以可以将[a-zA-Z]进一步简化为[a-z]。
var regex = /w[a-z]+?(\s[a-z]+?)?3/ig;
var instance = new Mark(document.querySelector("body"));
instance.markRegExp (regex, {
className: "mark"
});.mark {
color: white;
background: red;
}<script src="https://cdn.jsdelivr.net/mark.js/8.8.3/mark.min.js"></script>
<div>word1 word2 word3 wo rd3 word4</div>
https://stackoverflow.com/questions/63202816
复制相似问题