这个示例CKEditor javascript函数做什么?

这个示例CKEditor javascript函数做什么?,javascript,regex,asp.net-mvc,ckeditor,ckeditor.net,Javascript,Regex,Asp.net Mvc,Ckeditor,Ckeditor.net,MVC5 使用本文中的信息,我最终能够集成来自MVC方法/视图的图像选择过程,该方法/视图显示可用图像的列表,这些图像可以使用CKEditor插入文本区域 虽然最终的解决方案非常简单,但整个过程并不是特别直观。我最终会发布我的解决方案,因为我确信许多相对较新的MVC程序员,比如我自己,都在为这个功能寻找简单明了的解决方案。但与此同时 下面的代码显示了上面链接处示例2的相关行,稍微重新排列 <body> <button onclick="returnFileUrl()">

MVC5

使用本文中的信息,我最终能够集成来自MVC方法/视图的图像选择过程,该方法/视图显示可用图像的列表,这些图像可以使用CKEditor插入文本区域

虽然最终的解决方案非常简单,但整个过程并不是特别直观。我最终会发布我的解决方案,因为我确信许多相对较新的MVC程序员,比如我自己,都在为这个功能寻找简单明了的解决方案。但与此同时

下面的代码显示了上面链接处示例2的相关行,稍微重新排列

<body>
  <button onclick="returnFileUrl()">Select File</button>
</body>

<script>
    function getUrlParam( paramName ) {    // Helper function to get parameters from the query string.
        var reParam = new RegExp( '(?:[\?&]|&)' + paramName + '=([^&]+)', 'i' );
        var match = window.location.search.match( reParam );
        return ( match && match.length > 1 ) ? match[1] : null;
    }

    function returnFileUrl() {    // Simulate user action of selecting a file to be returned to CKEditor
        var funcNum = getUrlParam( 'CKEditorFuncNum' );
        var fileUrl = '/path/to/file.txt';
        window.opener.CKEDITOR.tools.callFunction( funcNum, fileUrl );
        window.close();
    }
</script>

选择文件
函数getUrlParam(paramName){//Helper函数从查询字符串中获取参数。
var reParam=new RegExp('(?:[\?&]|&')+paramName+'=([^&]+'),'i');
var match=window.location.search.match(reParam);
返回(match&&match.length>1)?匹配[1]:空;
}
函数returnFileUrl(){//模拟用户选择要返回到CKEditor的文件的操作
var funcNum=getUrlParam('CKEditorFuncNum');
var fileUrl='/path/to/file.txt';
window.opener.CKEDITOR.tools.callFunction(funcNum,fileUrl);
window.close();
}
我从未想过如何使用getUrlParam()。我最终绕过了它,通过变量funcNum输入了传入图像选择器方法的确切参数。当我这么做的时候,来自CKEditor的示例代码工作得很好


但是getUrlParam()函数在做什么?我只是名义上理解RegExp,而这一点我完全无法理解。有人能解释一下为什么会建议使用它吗?

http://google.com/search.php?q=term
),定义与
参数匹配的
RegExp
,并将其值捕获到组1中(
match[1]
,例如
术语
)这是由方法返回的。
window.location.search
获取JS中当前窗口URL的查询字符串部分(例如
?q=term

我会用一个更简单的

var reParam = new RegExp( '[?&]' + paramName + '=([^&]+)', 'i');
生成的正则表达式看起来像
[?&]q=([^&]+)
匹配:

  • [?&]
    -要么是
    要么是
    &
    (在您的原始代码中,它是
    (?:[\?&]|&)
    ,与
    &
    匹配,要么是
    &
    ,因此,我建议缩短)
  • q=
    -字符的文字序列
    q=
  • ([^&]+)
    -组1捕获一个或多个字符,而不是
    &
在VB.NET中,可以使用以下内容:

Private Shared Function getUrlParam(paramName As String) As String
    Dim reParam = "(?i)[?&]" & Regex.Escape(paramName) & "=([^&]+)"
    Dim match As Match = Regex.Match("http://google.com/index.php?q=term", reParam)
    If match.Success = True And match.Value.Length > 1 Then
        Return match.Groups(1).Value
    Else
        Return String.Empty
    End If
End Function

然后用
Dim res As String=getUrlParam(“q”)
调用我想这是一个模拟,就像它在评论中所说的那样,但是按照他们的例子,它不起作用。所以不是很好的模拟。但撇开这一点不谈,它仍然回避了一个问题:该函数试图实现什么?
getUrlParam
采用
paramName
(如
q
in
http://google.com/search.php?q=term
),定义一个与参数匹配的RegExp,并将其值捕获到组1中(
匹配[1]
,例如
术语
)这是由方法返回的
window.location.search
获取JS中当前窗口URL的查询字符串部分(例如
?q=term
)。我将用一个更简单的
var reParam=newregexp('[?&]'+paramName+'=([^&]+'),'I')替换正则表达式定义@Alan,有什么消息吗?我可以把我的解释作为回答吗?我不明白您是否需要这些帮助。@Wiktor,实际上我不理解您的评论,因为我对regex的理解有限,所以我打算花一些时间一步一步地浏览这些符号,尝试按照您的解释进行操作。我不想让你解释每个符号,因为这是我的责任,但如果你想解释,请随意解释。