我正在尝试通过以下字符串获取内容Camp de Futbol d'Aixovall
:
//<![CDATA[
//document.observe("dom:loaded", function() {mapsLoad()});
Event.observe(window, 'load', mapsLoad);
function loadMarkers()
{
setMarker(
"Camp de Futbol d'Aixovall",
42.476449269018,
1.487649679184,
null,
null,
1996,
null,
null,
null,
null,
"/venues/andorra/devk-arena/v1996/"
);
}
//]]>
我尝试了以下正则表达式模式:loadMarkers[^\{]+(.*})
但是这行不通,有人可以帮助我吗?
更新
var name = System.Text.RegularExpressions.Regex
.Match(c, @"(?<=function\s+loadMarkers\([^()]*\)(?:\r?\n.*){2}\r?\n\s*")[^ "]+(?=")").Groups[1].Value;
答案 0 :(得分:2)
对于发布的确切字符串,可以使用以下正则表达式
function\s+loadMarkers\([^()]*\)(?:\r?\n.*){2}\r?\n\s*"([^"]+)"
并提取第1组的值。参见regex demo。
详细信息
function\s+loadMarkers\(
-匹配function
,1个空格,loadMarkers(
,[^()]*
-匹配(
和)
之外的任何0+个字符\)
-一个)
字符(?:\r?\n.*){2}
-将换行符和整行匹配两次(以这种方式跳过两行)\r?\n
-换行符\s*
-超过0个空格"
-双引号([^"]+)
-组1:除"
以外的任何1个以上的字符"
-双引号。在C#中,代码看起来像
var pattern = @"function\s+loadMarkers\([^()]*\)(?:\r?\n.*){2}\r?\n\s*""([^""]+)""";
var name = System.Text.RegularExpressions.Regex.Match(c, pattern).Groups[1].Value;
结果将为Camp de Futbol d'Aixovall
。参见this regex demo。
如果出于某种原因要获得整个匹配值的结果,则将左右上下文包装在环顾中:
var pattern = @"(?<=function\s+loadMarkers\([^()]*\)(?:\r?\n.*){2}\r?\n\s*"")[^""]+(?="")";
var name = Regex.Match(c, pattern).Value;
答案 1 :(得分:1)
或者,您也可以使用模式
(?<=prefix)find(?=suffix)
,它匹配前缀和后缀之间的位置。它直接产生find
值,而不必使用组。
(?<=function\sloadMarkers\(\)\s+\{\s+setMarker\(\s+")[^"]+(?=")
其中
prefix = function\sloadMarkers\(\)\s+\{\s+setMarker\(\s+"
find = [^"]+
suffix = "