Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 过滤非字母数字并生成滴定酶_Javascript_Regex - Fatal编程技术网

Javascript 过滤非字母数字并生成滴定酶

Javascript 过滤非字母数字并生成滴定酶,javascript,regex,Javascript,Regex,我有一个列表,上面有一堆我需要转换成字母数字用户名的名字。我想做的是取名称,删除任何非字母数字值,并将其转换为删除字符的标题大小写。例如: johnson -> Johnson Van Halen -> VanHalen Torres-hernandez -> TorresHernandez Rafael van der vaart -> RafaelVanDerVaart 这可以用正则表达式来完成吗?使用一些字符串操作,可以非常简单地完成 var name =

我有一个列表,上面有一堆我需要转换成字母数字用户名的名字。我想做的是取名称,删除任何非字母数字值,并将其转换为删除字符的标题大小写。例如:

 johnson -> Johnson
 Van Halen -> VanHalen
 Torres-hernandez -> TorresHernandez
 Rafael van der vaart -> RafaelVanDerVaart

这可以用正则表达式来完成吗?

使用一些字符串操作,可以非常简单地完成

var name = "Torres-hernandez", i, part, out = "";
parts = name.split(/[^a-z0-9]+/gi);
for (i=0; part = parts[i++];) {
    out += part[0].toUpperCase() + part.slice(1).toLowerCase();
}

使用一些字符串操作,您可以非常简单地完成这项工作

var name = "Torres-hernandez", i, part, out = "";
parts = name.split(/[^a-z0-9]+/gi);
for (i=0; part = parts[i++];) {
    out += part[0].toUpperCase() + part.slice(1).toLowerCase();
}

您可以使用简单的regexp执行此操作:

var titleCase = function(s) {
  return s.toLowerCase().replace(/(?:^|\W)+(\w|$)/g, function(match, tail) {
    return tail.toUpperCase();
  });
};
正则表达式
/(?:^ |\W)+(\W |$)/g
这里捕获从上一个单词的开头到新单词的第一个字母的子字符串,新单词的第一个字母应该大写

它捕获整个匹配,并将其替换为大写的最后一个字符
tail

如果您的字符串以错误字符(例如空格)结尾,那么它也会被捕获,但在这种情况下,
taild
将是一个空字符串:

'   toRReS $#@%^! heRnAndeZ -++--=-=' -> 'TorresHernandez'
让我们检查一下我的regexp:

  • (^ |\W)+
    -非字母数字字符的序列
    (…)+
    \W
    或字符串的开头
    ^
    ,后面可以跟任意数量的非字母数字字符。它应该至少包含一个字符,除非它是字符串的开头,否则它可能是空的
  • (?:^ |\W)+
    -同样的事情,但由于
    ?:
    ,它不会被缓存。我们真的不在乎这部分,只是想剥掉它
  • (\w |$)
    -任何字母数字字符
    \w
    或字符串的结尾
    $
    。此部分将被缓存并放入
    tail
    变量中
更新如果正则表达式让您感到困惑,您可以对字符串和数组操作执行相同的操作:

var titleCase = function(str) {
  return str.split(/\W+/g)
    .filter(function(s) {
      return s.length > 0;
    }).map(function(s) {
      return s[0].toUpperCase() + s.slice(1).toLowerCase();
    }).join('');
};
这个解决方案受到了他的启发,与他自己的非常相似。不同之处在于,我的版本对循环使用数组操作而不是
,并使用
filter
来处理开头或和处字符不正确的字符串


我在正则表达式中使用了
\w
\w
特殊文本,它们分别等于
[A-Za-z0-9\
[^A-Za-z0-9\
)。如果您不想将
\uu
算作字母数字字符,则应将
\w
\w
替换为要匹配的精确字符集(例如
[A-Za-z0-9]
[^A-Za-z0-9]
)。

您可以使用简单的regexp:

var titleCase = function(s) {
  return s.toLowerCase().replace(/(?:^|\W)+(\w|$)/g, function(match, tail) {
    return tail.toUpperCase();
  });
};
正则表达式
/(?:^ |\W)+(\W |$)/g
这里捕获从上一个单词的开头到新单词的第一个字母的子字符串,新单词的第一个字母应该大写

它捕获整个匹配,并将其替换为大写的最后一个字符
tail

如果您的字符串以错误字符(例如空格)结尾,那么它也会被捕获,但在这种情况下,
taild
将是一个空字符串:

'   toRReS $#@%^! heRnAndeZ -++--=-=' -> 'TorresHernandez'
让我们检查一下我的regexp:

  • (^ |\W)+
    -非字母数字字符的序列
    (…)+
    \W
    或字符串的开头
    ^
    ,后面可以跟任意数量的非字母数字字符。它应该至少包含一个字符,除非它是字符串的开头,否则它可能是空的
  • (?:^ |\W)+
    -同样的事情,但由于
    ?:
    ,它不会被缓存。我们真的不在乎这部分,只是想剥掉它
  • (\w |$)
    -任何字母数字字符
    \w
    或字符串的结尾
    $
    。此部分将被缓存并放入
    tail
    变量中
更新如果正则表达式让您感到困惑,您可以对字符串和数组操作执行相同的操作:

var titleCase = function(str) {
  return str.split(/\W+/g)
    .filter(function(s) {
      return s.length > 0;
    }).map(function(s) {
      return s[0].toUpperCase() + s.slice(1).toLowerCase();
    }).join('');
};
这个解决方案受到了他的启发,与他自己的非常相似。不同之处在于,我的版本对循环使用数组操作而不是
,并使用
filter
来处理开头或和处字符不正确的字符串


我在正则表达式中使用了
\w
\w
特殊文本,它们分别等于
[A-Za-z0-9\
[^A-Za-z0-9\
)。如果您不想将
\uu
算作字母数字字符,则应将
\w
\w
替换为要匹配的精确字符集(例如
[A-Za-z0-9]
[^A-Za-z0-9]
)。

您使用的正则表达式是什么?首先您尝试了什么?其次,知道你使用的是哪种口味/语言是非常重要的。我在浏览器(javascript)中使用它,希望您也注意到有些名称不符合此逻辑。举个例子,你使用哪个正则表达式?首先,你尝试过什么?其次,知道你使用的是哪种口味/语言是非常重要的。我在浏览器(javascript)中使用它,希望您也注意到有些名称不符合此逻辑。例如