Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 捕获较大字符串中子字符串的父级_Javascript_Regex - Fatal编程技术网

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

Javascript 捕获较大字符串中子字符串的父级,javascript,regex,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

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

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");
我没有捕获
(.*?“+指针+”(.*?
)周围的值。我预计产出为:

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
如何更改模式?

这应该可以:

new RegExp("\\S*" + needle + "\\S*", "gmi")
\S
是任何非空白字符。

应该这样做:

new RegExp("\\S*" + needle + "\\S*", "gmi")
\S
是任何非空白字符。

应该这样做:

new RegExp("\\S*" + needle + "\\S*", "gmi")
\S
是任何非空白字符。

应该这样做:

new RegExp("\\S*" + needle + "\\S*", "gmi")
\S
是任何非空白字符。

这个怎么样

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
这个怎么样

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
这个怎么样

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
这个怎么样

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



那不就是抓住针吗?针可以在绳子的开头、结尾或中间。这样做的目的是捕获包含它的字符串。@thomas
match
不要求匹配整个字符串。@thomaas-
\S
的意思不是空格(大写S)。@thomas-So'aosidf asdoij aiosdf
捕获这个字符串和它的值将匹配。@Gumbo-您可能不需要多行修饰符(除非有其他含义)。这不就是捕获指针吗?指针可以位于字符串的开头、结尾或中间。目的是捕获包含它的字符串。@thomas
match
不需要匹配整个字符串。@thomaas-
\S
的意思不是空格(大写S).@thomas-So'aosidf asdoij aiosdf
capture_此_字符串_及其值
oasijdf'将匹配。@Gumbo-您可能不需要多行修饰符(除非它有其他含义)。这不只是捕获针吗?针可以位于字符串的开头、结尾或中间。其目的是捕获包含针的字符串。@thomas
match
不要求匹配整个字符串。@thomaas-
\S
的意思不是空格(大写S).@thomas-So'aosidf asdoij aiosdf
capture_此_字符串_及其值
oasijdf'将匹配。@Gumbo-您可能不需要多行修饰符(除非它有其他含义)。这不只是捕获针吗?针可以位于字符串的开头、结尾或中间。其目的是捕获包含针的字符串。@thomas
match
不要求匹配整个字符串。@thomaas-
\S
的意思不是空格(大写S).@thomas-So'aosidf asdoij aiosdf
capture\u这个字符串和它的值将匹配。@Gumbo-你可能不需要多行修饰符(除非它有其他含义)。考虑到Gumbo的答案,改进了。
[\s\t]
\s
[^\s\t]
\S
相同,因此每行只匹配一个项目。每行可能有多个项目。@sln就我而言,现在每行只有一个项目,谢谢。阿卡努比斯,双斜线是什么意思?@thomas,当只计算
“\\S”
,第一个\将转义第二个,因此生成的字符串将是
\s
。然后
\s
将传递给regexp构造函数,该构造函数将字符串
\s
转换为
/\s/
。长话短说,您需要使用\转义,该\将用于转义regexp中的
s
新RegExp(“\\s”)
等于
/\s/
。考虑到Gumbo的答案,改进了。
[\s\t]
\s
[^\s\t]相同
\S
相同,因此每行只匹配一个项目。每行可能有多个项目。@sln就我而言,现在每行只有一个项目,谢谢。阿卡努比斯,双斜线是什么意思?@thomas,当只计算
“\\S”
,第一个\将转义第二个,因此生成的字符串将是
\s
。然后
\s
将传递给regexp构造函数,该构造函数将字符串
\s
转换为
/\s/
。长话短说,您需要使用\转义,该\将用于转义regexp中的
s
新RegExp(“\\s”)
等于
/\s/
。考虑到Gumbo的答案,改进了。
[\s\t]
\s
[^\s\t]相同
\S
相同,因此每行只匹配一个项目。每行可能有多个项目。@sln就我而言,现在每行只有一个项目,谢谢。阿卡努比斯,双斜线是什么意思?@thomas,当只计算
“\\S”
,第一个\将转义第二个,因此生成的字符串将是
\s
。然后
\s
将传递给regexp构造函数,该构造函数将字符串
\s
转换为
/\s/
。长话短说,您需要使用\转义,该\将用于转义regexp中的
s
新RegExp(“\\s”)
等于
/\s/
。考虑到Gumbo的答案,改进了。
[\s\t]
\s
[^\s\t]相同
\S
相同,因此每行只匹配一个项目。每行可能有多个项目。@sln就我而言,现在每行只有一个项目,谢谢。阿卡努比斯,双斜线是什么意思?@thomas,当只计算
“\\S”
,第一个\将转义第二个,因此生成的字符串将是
\s
。然后
\s
将传递给regexp构造函数,该构造函数将字符串
\s
转换为
/\s/
。长话短说,您需要使用\转义,该\将用于转义regexp中的
s
新RegExp(“\\s”)
等于
/\s/
。无论是什么解决方案,请尝试逃避所有错误