繁体   English   中英

Javascript正则表达式积极前瞻

[英]Javascript Regex Positive Lookahead

将a regex word的开头和结尾定义为捕获组中的边界的正确语法是什么,如下所示:

var $classes = $( 'body' ).attr('class'); // string 'foo bar sub-theme-home';
var regex = /sub-theme-(?=(\b))/;
var sub_theme = regex.exec($classes);
console.log(sub_theme[0]);

这与sub-theme-匹配,并且如果我需要在捕获中包括该子主题并进行字符串替换以将其删除就可以了,但我在为(?-(\\b))/捕获找出正确的语法时遇到了麻烦组。 看起来像是积极向前, sub-theme-应该被省略的部分, home应该被捕获...帮助吗?

为什么不只捕获您要查找的字符串?

var $classes = $( 'body' ).attr('class'); // string 'foo bar sub-theme-home';
var regex = /sub-theme-(\w+)/;
var sub_theme = regex.exec($classes);
console.log(sub_theme[1]);

MDN上了解有关带括号的子字符串和regex.exec(...)结果的更多信息。

尝试这个:

var regex = /sub-theme-(\w+)/;

Javascript RegExp不支持某些高级的正则表达式功能,例如lookbehindes,名为捕获组的...。(这本书是针对Web开发人员的专业Javascript,第三版)p136:

模式限制

尽管ECMAScript的正则表达式支持已得到充分开发,但它确实缺少某些语言(如Perl)可用的高级正则表达式功能。 ECMAScript正则表达式不支持以下功能(有关更多信息,请参见www.regularexpressions.info):

  • \\ A和\\ Z锚点(分别匹配字符串的开头或结尾)
  • 向后看
  • 联合和交叉类
  • 原子分组
  • Unicode支持(一次匹配一个字符除外)
  • 命名捕获组
  • s(单行)和x(自由间距)匹配模式
  • 有条件的
  • 正则表达式注释

尽管有这些限制,但ECMAScript的正则表达式支持功能强大,足以执行大多数模式匹配任务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM