正则匹配

avatarplhDigital nomad

零宽断言(1.零宽度正回顾后发断言

先举个例子,我想匹配<p>标签里面的内容。

const str = `
  <p>Para 1.</p>
  <img src="smiply.jpg" />
  <p>Para 2.</p>
  <div>Div.</div>
`;
str.match(/(?<=<p>)\w*/g);

在这里,(?<=exp)表示不匹配<p>本身,匹配它后面的内容。

(2.零宽度正预测先行断言

用于匹配带*.js文件的名字

const str = `
  peng.jpg
  li.jpg
  heng.jpg
`;
str.match(/\b\w+(?=.jpg\b)/g);

回溯

先从贪婪匹配和惰性匹配说起,贪婪匹配从最多开始匹配,如果匹配不到,就开始回溯,惰性匹配从最少开始匹配,如果匹配不到,则回溯, image

使用正则去掉头尾空白

l从使用正则去掉字符串头尾空白去学习正则是一个不错的方式,因为我们有很多方式去实现它。 \s表示空格,\S表示非空格,这个对应其他的都一样\w表示字母,\W表示非字母

\s*        // 0-∞个
\s+       // 1-∞个
\s{1,2}  // 1-2个
\s{5,}    // 5-∞个
  • 浏览器方法
'   23232   '.trim()    //尽管浏览器实现它很简单。这种方法浏览器对它经过了底层优化,所以它比所有方法都快
  • 方法一。用两个正则,从前后两端替换,用两次replace
'   hi yours   '.replace(/^\s+/,'').replace(/\s+$/,'')
  • 方法二,将两个正则合并, 通过|这个油管符号,以及全局匹配
'   hi yours   '.replace(/^\s+|\s+/g,'')
  • 方法三,匹配整个字符串,将中间的提取出来,([\s\S]*?)是惰性匹配
'   hi yours   '.replace(/^\s*([\s\S]*?)\s*$/,'$1');
  • 方法四,匹配整个字符串,将中间的提取出来,([\s\S]*?)是贪婪匹配
'   hi yours   '.replace(/^\s*([\s\S]*\S)?\s*$/,'$1')
  • 方法五,
'   hi yours   '.replace(/^\s*(\S*(\s+\S+)*)?\s*$/,'$1')