gpt4 book ai didi

Javascript 正则表达式功能

转载 作者:搜寻专家 更新时间:2023-11-01 05:06:00 25 4
gpt4 key购买 nike

我在这上面花了几个小时,但我似乎无法弄清楚这一点。

在下面的代码中,我试图准确理解 url.match 中的正则表达式是什么以及如何工作。

由于下面的代码,它不起作用。但是,如果我删除 (?:&toggle=|&ie=utf-8|&FORM=|&aq=|&x=|&gwp) 它似乎给了我想要的输出。

但是,我不想在不了解它在做什么的情况下删除它。

我找到了一个非常有用的资源,但几个小时后我仍然无法准确确定这些表达式在做什么:

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions#Using_Parenthesized_Substring_Matches

谁能帮我分解一下并解释一下它是如何解析字符串的。表达式本身和括号的位置对我来说并不是很清楚,坦率地说非常困惑。

感谢任何帮助。

(function($) {    

$(document).ready(function() {

function parse_keywords(url){
var matches = url.match(/.*(?:\?p=|\?q=|&q=|\?s=)([a-zA-Z0-9 +]*)(?:&toggle=|&ie=utf-8|&FORM=|&aq=|&x=|&gwp)/);
return matches ? matches[1].split('+') : [];

}
myRefUrl = "http://www.google.com/url?sa=f&rct=j&url=https://www.mydomain.com/&q=my+keyword+from+google&ei=fUpnUaage8niAKeiICgCA&usg=AFQjCNFAlKg_w5pZzrhwopwgD12c_8z_23Q";

myk1 = (parse_keywords(myRefUrl));

kw="";

for (i=0;i<myk1.length;i++) {
if (i == (myk1.length - 1)) {
kw = kw + myk1[i];
}
else {
kw = kw + myk1[i] + '%20';
}
}

console.log (kw);

if (kw != null && kw != "" && kw != " " && kw != "%20") {

orighref = $('a#applynlink').attr('href');
$('a#applynlink').attr('href', orighref + '&scbi=' + kw);
}

});

})(jQuery);

最佳答案

让我们分解这个正则表达式。

/

开始正则表达式。

.*

匹配零个或多个任何东西 - 基本上,我们愿意将此正则表达式的任何点匹配到字符串中。

(?:\?p=
|\?q=
|&q=
|\?s=)

在此,?: 表示“不要捕获该组内的任何内容”。参见 http://www.regular-expressions.info/refadv.html

\? 的意思是 ? 的字面意思,它通常是一个字符,意思是“匹配前一个标记的 0 或 1 个副本”,但我们想匹配一个实际的 ? .

除此之外,它只是在寻找大量不同的选项以供选择(| 表示“如果我匹配我之前或之后的内容,则正则表达式有效。”

([a-zA-Z0-9 +]*)

现在我们以任何排列匹配以下任何字符中的零个或多个:a-ZA-Z0-9 + 并且因为它在 () 中no ?: 我们确实捕获了它。

(?:&toggle=
|&ie=utf-8
|&FORM=
|&aq=
|&x=
|&gwp)

我们看到另一个 ?: 所以这是另一个非捕获组。除此之外,它只是充满了由 | 分隔的文字字符,因此它没有执行任何花哨的逻辑。

/

结束正则表达式。

总而言之,这个正则表达式在字符串中查找第一个非捕获组的任何实例,捕获其中的所有内容,然后查找第二个非捕获组的任何实例以“限制”它并返回所有内容在这两个非捕获组之间。 (将其视为“三明治”,我们寻找页眉和页脚并捕获我们感兴趣的两者之间的所有内容)

正则表达式运行后,我们这样做:

返回匹配项?匹配 [1].split('+') : [];

它获取捕获的组并将其在 + 上拆分为一个字符串数组。

关于Javascript 正则表达式功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15961351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com