将字符串转换为各种格式

时间:2014-12-05 02:43:55

标签: javascript regex

我的用户将提交的表单中有一个title字符串。我想以任何方式编写title,并将其格式化为标题案例,我认为这是最友好的阅读方式。

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

我还想像“和”或“或”这样的词,并将它们作为小写,如上所示。这可能吗?

此外,在某些情况下,我想取这个title并过滤它,以便忽略任何特殊字符,如撇号,并用破折号分隔。这将用于网址(即.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;
}

我需要一些关于如何改进这个的建议,所以它会注意“和”或“或”并将这两个单词保持小写,同时保留字符串标题的其余部分?

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;
}

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

2 个答案:

答案 0 :(得分:1)

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

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

现在我们需要创建一个使整个String小写的函数,这样我们只能将每个单词中的第一个字母大写。这可以通过在' '上拆分小写字符串来完成。接下来,我们遍历.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);

用法:

{{1}}

答案 1 :(得分:0)

((?:^|\s)[a-z])(?!nd\b|r\b)

您可以尝试使用$1.upper()或其他内容来尝试此正则表达式。这不会选择andor

参见演示。

https://regex101.com/r/yR3mM3/59