Javascript 将href中的小写字符替换为大写

Javascript 将href中的小写字符替换为大写,javascript,html,jquery,regex,Javascript,Html,Jquery,Regex,我有一个网页,为关键字生成链接。在网页上生成的链接如下所示: https://www.example.com/?keywords=energy https://www.example.com/?keywords=wind%20power 我想更改它,以便=(以及%20之后的第一个字符(如果适用)为大写: https://www.example.com/?keywords=Energy https://www.example.com/?keywords=Wind%20Power 目前,我已根据

我有一个网页,为关键字生成链接。在网页上生成的链接如下所示:

https://www.example.com/?keywords=energy
https://www.example.com/?keywords=wind%20power
我想更改它,以便
=
(以及
%20
之后的第一个字符(如果适用)为大写:

https://www.example.com/?keywords=Energy
https://www.example.com/?keywords=Wind%20Power
目前,我已根据每个关键字将其更改为大写:

$(document).ready(function(){
    $('a').each(function(){
        this.href = this.href.replace('energy', 'Energy');
    });

    $('a').each(function(){
        this.href = this.href.replace('wind%20power', 'Wind%20Power');
    });
});
有没有办法做到这一点,但任何字符串?我尝试了几个正则表达式,但似乎找不到一个正则表达式来使用javascript将等号后的第一个字符替换为大写等效字符。例如,我尝试了这个(),然后尝试将其转储到页面上的脚本中:

`$(document).ready(function(){
    $('a').each(function(){
        this.href = this.href.replace(\=.,\U$0);
    });
});`

当然,它不起作用,因为它是针对PHP的,但是当我在regex测试仪上单击ECMAscript风格时,它只是将等号和它后面的第一个字符替换为
\U$0
您可以匹配
=
,然后使用内部的另一个替换函数,用大写字母替换连续的字母字符:

$('a').each(function(){
    this.href = this.href.replace(
        /=(.+)/g,
        (_, keywords) => '=' + keywords.replace(
            /([a-z])([a-z]*)/gi,
            (_, initial, rest) => initial.toUpperCase() + rest.toLowerCase()
        )
    );
});
$('a')。每个(函数(){
this.href=this.href.replace(
/=(.+)/g,
(_,关键字)=>'='+关键字。替换(
/([a-z])([a-z]*)/gi,
(389;,initial,rest)=>initial.toUpperCase()+rest.toLowerCase()
)
);
});

您可以匹配一个
=
,然后在其中使用另一个替换函数,用大写字母替换相邻的字母字符:

$('a').each(function(){
    this.href = this.href.replace(
        /=(.+)/g,
        (_, keywords) => '=' + keywords.replace(
            /([a-z])([a-z]*)/gi,
            (_, initial, rest) => initial.toUpperCase() + rest.toLowerCase()
        )
    );
});
$('a')。每个(函数(){
this.href=this.href.replace(
/=(.+)/g,
(_,关键字)=>'='+关键字。替换(
/([a-z])([a-z]*)/gi,
(389;,initial,rest)=>initial.toUpperCase()+rest.toLowerCase()
)
);
});

如果要匹配=或%20,只需修改正则表达式以包含%20作为选项,确保设置了全局标志,然后将函数传递给替换函数,将匹配字符串的部分大写

let url=”https://www.example.com/?keywords=wind%20power%20earth%20fire";

让regex=/(?如果要匹配=或%20,只需修改regex以包含%20作为选项,确保设置了全局标志,然后将函数传递给replace函数,以大写匹配字符串的部分

let url=”https://www.example.com/?keywords=wind%20power%20earth%20fire";

让regex=/(?无需花哨,使用
URL()
构造函数

let url=新url(“https://www.example.com/?keywords=wind%20power%20earth%20fire");
设params=url.searchParams.get('keywords')
console.log(参数)
参数拆分(“”).forEach((e)=>{
console.log(
e[0].toUpperCase()+e.substring(1)
)
}

)
无需花哨,使用
URL()
构造函数

let url=新url(“https://www.example.com/?keywords=wind%20power%20earth%20fire");
设params=url.searchParams.get('keywords')
console.log(参数)
参数拆分(“”).forEach((e)=>{
console.log(
e[0].toUpperCase()+e.substring(1)
)
}

)
通常,当没有特定的编码器/解码器提供帮助时,regex应该是最后一步。(如本例中的decodeURIComponent或URL构造函数)


通常,正则表达式应该是最后一步,因为此时没有特定的编码器/解码器可以提供帮助


如果只有这些情况,您可以使用简单的一行代码解决:

url="https://www.example.com/?keywords=wind%20power%20earth%20fire"
url.replace(/(=\w)|(\s\w)|(%20\w)/g,val=>val.toUpperCase())
有关
有关javascript替换函数的更多信息,请访问

如果只有这些情况,您可以使用简单的一行代码解决:

url="https://www.example.com/?keywords=wind%20power%20earth%20fire"
url.replace(/(=\w)|(\s\w)|(%20\w)/g,val=>val.toUpperCase())
有关
有关javascript替换函数的更多信息,请访问

我认为这在概念上更简单(无论如何对我来说):


我认为这在概念上更简单(无论如何对我来说):


使用2010年后的技术怎么样?你是什么意思?
.replace
工作正常,并且隐式返回箭头函数(ES2015功能)非常好。我想你可以把
'='+关键字替换成模板文字,但这太难理解了。好吧,我留下了一个关于内置URL()解析器用法的答案。也许不是idk的最佳方式,但至少它是可读的,甚至是可记忆的(就像我在那里所做的那样,通过head).使用2010年后的技术如何?你是什么意思?
.replace
工作正常,并且隐式返回箭头函数(ES2015功能)非常好。我想你可以把
'='+关键字替换成模板文字,但这太难理解了。好吧,我留下了一个关于内置URL()解析器用法的答案。也许不是idk的最佳方式,但至少它是可读的,甚至是可记忆的(就像我在那里所做的那样,通过head).嘿,这很酷,我喜欢URL接口。尽管注意OP需要更改href,而不仅仅是记录更改的单词。当然,需要连接,应该很容易。嘿,这很酷,我喜欢URL接口。尽管注意OP需要更改href,而不仅仅是记录更改的单词。当然,需要连接,应该很容易。这很有效就像一个符咒。谢谢!也谢谢你的链接。我确实学到了很多关于正则表达式的知识。非常感谢。这就像一个符咒一样有效。谢谢!也谢谢你的链接。我确实学到了很多关于正则表达式的知识。非常感谢。这将取代大写“=”符号后的所有内容。我我相信op只想大写“=”符号后的第一个字母,每个空格后的第一个字母。这只是将“=”符号后的所有字母替换为大写。我相信op只想大写“=”符号后的第一个字母,以及每个空格后的第一个字母。