JS Regexp - 如何在字符串中查找文本

时间:2016-07-16 15:12:17

标签: javascript regex

有一些文本,exp:"字符串类是使用char"的basic_string类模板的实例化。

我需要找到文本 - " basic_string",但是如果没有单词""在他面前。

如果使用负面观察,那就是:

(?<!\sthe)\s+basic_string

但是javascript不理解负面的背后,该怎么办?

4 个答案:

答案 0 :(得分:3)

如果“the”和“basic_string”之间唯一允许的字符是空格:

([^e\s]|[^h]e|[^t]he)\s+basic_string

答案 1 :(得分:1)

您可以使用xregexp library获取高级正则表达式功能,例如Javascript中的lookbehind。

或者您可以将替换和捕获组用作解决方法

var s = 'The string class is an instantiation of the basic_string class template that uses char';

var kw = s.match(/\bthe basic_string\b|(\bbasic_string\b)/)[1];
// undefined

s = 'instantiation of basic_string class template'
kw = s.match(/\bthe basic_string\b|(\bbasic_string\b)/)[1]
//=> "basic_string"

在此正则表达式中,如果bbasic_string前面没有单词the,则捕获的组#1将仅填充

答案 2 :(得分:1)

您可以使用RegExp /(the)(?\sbasic_string)/new RegExp("(" + before + ")(?=" + match + ")")来匹配"the",如果后跟" basic_string".match()则需要.index匹配字符串,.slice()获取"basic_string"

&#13;
&#13;
var str = "The string class is an instantiation of the basic_string class template that uses char";
var before = "the";
var match = " basic_string";
var index = str.match(new RegExp("(" + before + ")(?=" + match + ")")).index 
            + before.length + 1;
console.log(str.slice(index, index + match.length));
&#13;
&#13;
&#13;

答案 3 :(得分:1)

模仿负面反馈的最简单方法是通过可选的捕获组,并检查该组是否参与了比赛:

/(\bthe)?\s+basic_string/g
 ^^^^^^^^

参见这个JS演示:

var s = 'The string class is an instantiation of the basic_string class template that uses char, not basic_string.';
var re = /(\bthe)?(\s+basic_string)/gi;
var res = s.replace(re, function(match, group1, group2) {
   return group1 ? match : "<b>" + group2 + "</b>";
});
document.body.innerHTML = res;