Javascript正则表达式积极前瞻

时间:2012-10-31 03:20:13

标签: javascript regex debugging syntax

将正则表达式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应该被捕获......帮助?

3 个答案:

答案 0 :(得分:5)

为什么不捕捉你正在寻找的字符串?

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(...)的结果的详情。

答案 1 :(得分:3)

试试这个:

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

答案 2 :(得分:2)

Javascript RegExp不支持一些高级正则表达式功能,如lookbehindes,命名捕获组.... 这本书(专业的Javascript for Web Developers,第3版)p136:

模式限制

  

尽管ECMAScript的正则表达式支持已完全开发,   它确实缺少一些高级正则表达式功能   提供Perl等语言。以下功能不是   ECMAScript正则表达式支持(有关更多信息,请参阅   www.regularexpressions。信息):

  • \ A和\ Z锚点(匹配字符串的开头或结尾, 分别地)
  • Lookbehinds
  • 联盟和交叉类
  • 原子分组
  • Unicode支持(一次匹配单个字符除外)
  • 命名捕获组
  • s(单行)和x(自由间隔)匹配模式
  • 条件
  • 正则表达式评论

尽管存在这些限制,ECMAScript的正则表达式支持功能强大 大多数模式匹配任务。