首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex将所有内容转换为小写,但URL除外。

Regex将所有内容转换为小写,但URL除外。
EN

Stack Overflow用户
提问于 2014-06-10 14:15:18
回答 3查看 311关注 0票数 1

给出一个免费的文本

你好,世界http://example.com/?param=FooBar快餐店

..。除了大多数常见的URL模式(因为它们是需要保留大小写的部分)之外,如何才能将所有内容转换为小写字母呢?

上面的结果将是

你好,世界http://example.com/?param=FooBar快餐店

我在用JavaScript。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-10 14:26:48

我会这样做:

代码语言:javascript
复制
var str = 'Hello World http://example.com/?param=FooBar Foo Bar';

str.replace(/[^\s]+/g, function (match) {
    return match.indexOf('http') === 0 ? match : match.toLowerCase();
})

http://jsfiddle.net/xMPFW/1/

根据您想要的具体程度,您可以在回调中包含一个更复杂的URL检查--如下所示:https://stackoverflow.com/a/3809435/1200182

票数 2
EN

Stack Overflow用户

发布于 2014-06-10 14:28:17

这应该是可行的:

代码语言:javascript
复制
var s = 'Hello World http://example.com/?param=FooBar FOO Bar';
var r = s.replace(/([^ A-Z]*)([A-Z])/g, function($1, $2) { 
     return /https?:\/\/\S+/.test($1) ? $1 : $1.toLowerCase(); 
});
//=> hello world http://example.com/?param=Foobar foo bar
票数 1
EN

Stack Overflow用户

发布于 2014-06-10 14:29:41

将字符串标记化,然后利用来自这里的URI Regex检查令牌是否是URI令牌,如果没有使其小写。

代码语言:javascript
复制
var regex = new RegExp("([A-Za-z][A-Za-z0-9+\\-.]*):(?:(//)(?:((?:[A-Za-z0-9\\-._~!$&'()*+,;=:]|%[0-9A-Fa-f]{2})*)@)?((?:\\[(?:(?:(?:(?:[0-9A-Fa-f]{1,4}:){6}|::(?:[0-9A-Fa-f]{1,4}:){5}|(?:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,1}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){3}|(?:(?:[0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){2}|(?:(?:[0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(?:(?:[0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::)|[Vv][0-9A-Fa-f]+\\.[A-Za-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:[A-Za-z0-9\\-._~!$&'()*+,;=]|%[0-9A-Fa-f]{2})*))(?::([0-9]*))?((?:/(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*)|/((?:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})+(?:/(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*)?)|((?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})+(?:/(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*)|)(?:\\?((?:[A-Za-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9A-Fa-f]{2})*))?(?:\\#((?:[A-Za-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9A-Fa-f]{2})*))?")

var text = 'Hello World http://example.com/?param=FooBar Foo Bar';
var tokens = text.split(' ');
var lowerText = '';

for (var i = 0; i < tokens.length; i++) {
    if (i != 0)
        lowerText += ' ';
    if (!tokens[i].match(regex))
        lowerText += tokens[i].toLowerCase();
    else
        lowerText += tokens[i];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24143337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档