有一些文本,exp:"字符串类是使用char"的basic_string类模板的实例化。
我需要找到文本 - " basic_string",但是如果没有单词""在他面前。
如果使用负面观察,那就是:
(?<!\sthe)\s+basic_string
但是javascript不理解负面的背后,该怎么办?
答案 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"
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;
答案 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;