Javascript Regex相当于PHP Regex

时间:2016-09-01 08:34:36

标签: javascript php regex

我发现用php下面的正则表达式强调单词的单词

/(?<!\\w)".$word."(?!\\w)/

我希望使用正则表达式在javascript中使用此正则表达式的精确输出。

有人可以推荐以上正则表达式的javascript正则表达式吗?

我想搜索起始索引 - 从实现的JS正则表达式匹配的单词的结束索引。

2 个答案:

答案 0 :(得分:3)

您可以使用\b(字边界)令牌like this来匹配字词。

&#13;
&#13;
var text = 'I want to match .word. all words that have .word. in them.';
var word = '.word.';
var regex = new RegExp('(' + escapeRegExp(word) + ')');

console.log(text.match(regex));

function escapeRegExp(str) {
  return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
&#13;
&#13;
&#13;

编辑:由于评论而更新。

答案 1 :(得分:0)

一个重要的注意事项:在PHP中,如果使用\w修饰符,/u可能会识别Unicode,但由于您没有使用该Unicode模式,因此以下内容应该以相同的方式工作。

JS正则表达式支持 lookbehinds 。您需要将lookbehind转换为包含两个备选方案的捕获组:字符串的开头或非单词字符。

所以,你的构造函数看起来像

new RegExp('(^|\\W)(' + search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + ')(?!\\w)', 'g')

这是一个正则表达式演示:

&#13;
&#13;
var search = '.search.';
var rx = new RegExp('(^|\\W)(' + search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + ')(?!\\w)', 'g');
var s = ".search. .search.";
while ((m=rx.exec(s))!==null) {
  if (m[1]) {
     console.log(m.index+1, rx.lastIndex);
   } else { 
     console.log(m.index, rx.lastIndex);
   }
}
&#13;
span.highlight {
  color: #FF0000;
 }
&#13;
&#13;
&#13;

(^|\\W)将匹配并捕获字符串的开头或非字char到组1(从替换模式引用$1反向引用)并且搜索字以{{1进行转义(以防万一有.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&').之类的特殊字符等。搜索词被捕获到第2组中。

前瞻性的支持方式与PHP相同,因此您可以像原始正则表达式一样使用(

(?!\\w)将获取匹配开始位置,因此,我们需要检查组1是否为空。如果不是,它匹配非单词符号,所以我们需要在使用之前增加它。否则,只需使用普通m.index。结束位置是m.index属性值。