给出一个免费的文本
你好,世界http://example.com/?param=FooBar快餐店
..。除了大多数常见的URL模式(因为它们是需要保留大小写的部分)之外,如何才能将所有内容转换为小写字母呢?
上面的结果将是
你好,世界http://example.com/?param=FooBar快餐店
我在用JavaScript。谢谢!
发布于 2014-06-10 14:26:48
我会这样做:
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
发布于 2014-06-10 14:28:17
这应该是可行的:
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发布于 2014-06-10 14:29:41
将字符串标记化,然后利用来自这里的URI Regex检查令牌是否是URI令牌,如果没有使其小写。
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];
}https://stackoverflow.com/questions/24143337
复制相似问题