捕获较大字符串中子字符串的父级

时间:2013-10-16 17:03:24

标签: javascript regex

我试图编写一个模式来捕获一个字符串,该字符串是指定子字符串的父字符串,该子字符串位于较大的文本字符串中,但由制表符或空格包围。所以,例如,如果我有:

aosidf asdoij aiosdf capture_this_string_and_its_value oasijdf 
adsf aosidf asdoij aiosdf capture_this_string_and_its_value2 oasijdf oaisjd 
adsf aosidf aiosdf now_capture_in_middle3 oasijdf oaisjd 
adsf aosidf asdoij capture_this_string_and_its_value4 oasijdf oaisjd 


var input_value= $("#input").val(); //the value of all that text taken from a textarea
var needle = "capture";

var re = new RegExp("((.*?)[\s\t]){0,}((.*?)" + needle + "(.*?))[\s\t]+(.*)(\r\n)?", "gmi");

var res = input_value.replace(re, "$3\n");

我没有捕捉(.*?)" + needle + "(.*?)周围的值。我希望输出为:

capture_this_string_and_its_value
capture_this_string_and_its_value2
now_capture_in_middle3
capture_this_string_and_its_value4

但是我的结果很差。

df capture_thi

df capture_thi

df now_capture_in_middle3 oa

doij capture_thi

如何更改模式?

2 个答案:

答案 0 :(得分:2)

这应该这样做:

new RegExp("\\S*" + needle + "\\S*", "gmi")

\S是任何非空格字符。

答案 1 :(得分:1)

这个怎么样?

var re = new RegExp(".*\\s+(\\S*" + needle + "\\S*)\\s+.*", "gmi");
var res = input_value.replace(re, "$1");

输出:

capture_this_string_and_its_value
capture_this_string_and_its_value2
now_capture_in_middle3
capture_this_string_and_its_value4