javascript - 将字符串转换为各种格式

标签 javascript regex

我有一个 title 字符串,该字符串来 self 的用户将提交的表单。我想采用该标题,无论它以何种方式编写,并将其格式化为标题大小写,我认为这是最易于阅读的方式。

alexis Sanchez -> Alexis Sanchez
sanchez's ball -> Sanchez's Ball
sanchez and co -> Sanchez and Co

我还想将“and”或“or”等单词设为小写,如上所示。这可能吗?

另外,在某些情况下,我想获取此标题并对其进行过滤,以便它忽略撇号等任何特殊字符并用破折号分隔它。这将用于 URL(即 .com/sanchezs-ball)。

alexis Sanchez -> alexis-sanchez
ALEXIS Sanchez -> alexis-sanchez
sanchez's ball -> sanchezs-ball

我创建了两个几乎可以完成此操作的函数。我只需要一些关于如何调整它们以使其达到我想要的格式的建议。

这个将我的 title 转换为类似 URL 的字符串。这可以改进/缩短吗?

function hashifyString(dirtyString) {
  var title = dirtyString
  .replace(/[^a-z0-9\s]/gi, '')
  .replace(/\b\w+/g,function(s){return s.substr(0).toLowerCase();})
  .replace(/[_\s]/g, '-');
  return title;
}

我需要一些关于如何改进这个的建议,因此它会查找“and”或“or”并将这两个单词保持小写,同时保持字符串标题其余部分的大小写?

function beautifyString(dirtyString) {
  var string = dirtyString
  .replace(/[^a-z0-9\s]/gi, '')
  .replace(/\b\w+/g,function(s){return s.charAt(0).toUpperCase() + s.substr(1).toLowerCase();})
  return string;
}

我希望这是有道理的。任何帮助表示赞赏。提前致谢!

最佳答案

首先让我们简单地创建一个 inArray 函数。

function inArray(val, ary){
  for(var i=0,l=ary.length; i<l; i++){
    if(ary[i] === val){
      return true;
    }
  }
  return false;
}

现在我们需要创建一个函数,使整个字符串小写,这样我们就可以只大写每个单词的第一个字母。这可以通过拆分 ' ' 上的小写字符串来完成。接下来,我们循环遍历 .split(' ') 的结果,测试它是否是 exceptions 数组中的单词之一。如果是这样,我们不会将其大写,否则我们会大写。 .join(' ') 所有内容都回到我们 .split(' ') 上的同一个 ' ' 上,并返回结果。

function ucFirstWord(str, exceptions){
  var st = str.toLowerCase().split(' '), r = [];
  for(var i=0,l=st.length; i<l; i++){
    var s = st[i];
    var x = inArray(s, exceptions) ? s : s.charAt(0).toUpperCase()+s.substring(1);
    r.push(x);
  }
  return r.join(' ');
}

这个函数应该是不言自明的。

function lcHyphenize(str){
  return str.toLowerCase().replace(' ', '-');
}

用法:

var ucString = ucFirstWord(yourStringVar, ['the', 'and', 'then', 'but', 'or', 'yet']);
var hzString = lcHyphenize(yourStringVar);

关于javascript - 将字符串转换为各种格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27307910/

相关文章:

javascript代码无法在本地工作,但可以在jsfiddle中工作

c# - Entity Framework - 如何将我的特定代码转换为 MySQL 可以理解的表达式

java - 删除两个字符之间的子字符串(java)

javascript - AngularJS路由-基于匹配URL主机名的调用函数

C 中的 Javascript 回调编码风格?

javascript - RegExp.exec() 在 Firefox 中重复调用时返回 null?

regex - 如何使用 -Filter (使用正则表达式)?

arrays - 将字符串拆分为数组(以 "\"分隔)

由于 .*,正则表达式匹配流在一起

javascript - 如何在 Mozilla Addon 中调用用户函数?