首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript regex camelcase

javascript regex camelcase
EN

Stack Overflow用户
提问于 2016-08-09 00:10:46
回答 3查看 644关注 0票数 0

我现在正在获取location.path url,并将url显示为我的标题,如果我有一个像“香蕉和苹果”的标题,我不想要“和”,而只返回“香蕉和苹果”,我如何才能使它成为驼峰?

我发现了这段javascript代码,它返回了我的标题“香蕉和苹果”。

代码语言:javascript
复制
function camelize(str) {
        return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) {
            if (+match === 0) return " "; // or if (/\s+/.test(match)) for white spaces
            return index == 0 ? match.toLowerCase() : match.toUpperCase();
        });
    }

我将(/)和(-)替换为空格

代码语言:javascript
复制
this.title = camelize(lastPartOfUrl.replace(/\/|\-/g, ' '));

代码语言:javascript
复制
var cleanUrl = lastPartOfUrl.replace(/\/-/g, ' ');
this.title = camelize(cleanUrl.replace(/-/g, ' '));
EN

回答 3

Stack Overflow用户

发布于 2016-08-09 01:14:56

有一个基于单个RegEx的较短的解决方案。

代码语言:javascript
复制
function camelCase(txt){
   var lower='and,or,a,in,on,'; //stop-words
   return txt //.split(/\/-/).join(' ')
           .toLowerCase().replace(/(\b.)(\S*\b)(\s|$)/g,
                      function(m/*full match*/,
                               n/*(\b.)*/,
                               p/*(\S*\b)*/,
                               q/*(\s|$)*/){
                        //console.log(n,p);
                        return (lower.indexOf(n+p+',')===-1?
                          n.toUpperCase() : n) + p + q;});
}
票数 1
EN

Stack Overflow用户

发布于 2016-08-09 00:17:14

代码语言:javascript
复制
String.prototype.capitalizeFirstLetter = function() {
  return this.charAt(0).toUpperCase() + this.slice(1);
};

String.prototype.toCamelCase = function() {
  return this.split(" ").reduce((previousValue, currentValue, currentIndex) => (currentIndex == 1) ? 
    previousValue.toLowerCase() + currentValue.capitalizeFirstLetter() :
    previousValue + currentValue.capitalizeFirstLetter()
  );
};
alert("Banana And Apples".toCamelCase())

编辑:将单词大写,但单词数组变为小写除外:

代码语言:javascript
复制
function titleCaseExcept(value, lowerCaseArray, upperCaseArray, isCaseSensitive) {
  var str = value.replace(/([^\W_]+[^\s-]*) */g, (txt) =>
    txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()
  );
  var regexFlags = (isCaseSensitive) ? 'gi' : 'g';

  // Lower case words
  lowerCaseArray.forEach( (element) => 
    str = str.replace(new RegExp('\\s' + element + '\\s', regexFlags), 
      (text) => text.toLowerCase()
    )
  );
    
  // Upper case words
  upperCaseArray.forEach( (element) =>
    str = str.replace(new RegExp('\\b' + element + '\\b', regexFlags), 
      (text) => text.toUpperCase()
    )
  );
      
  return str;
}

// Find any of these, in any case, to replace to lowercase
lowers = ['A', 'an', 'THE', 'and', 'But', 'oR', 'For', 'Nor', 'As', 'At', 
  'By', 'For', 'From', 'In', 'Into', 'Near', 'Of', 'On', 'Onto', 'To', 'With'];
// Find any of these, in any case, to replace to uppercase
uppers = ['id', 'tv'];

// Last parameter is true for case-insensitive arrays
console.log(upperCaseExcept("Bananas And Apples In Some Place On Tv", lowers, uppers, true));

票数 0
EN

Stack Overflow用户

发布于 2016-08-09 00:58:57

除非你求助于Nick Bull的解决方案或类似的解决方案,否则在任何计算机语言中都还没有一种连贯的方法来做到这一点。

问题是计算机程序没有意识到“banana”和“and”是不同类型的词,比如:“banana”是一个名词,“and”是一个连词。

你要么必须利用你对字符串中可能存在的东西的知识(就像Nick Bull的解决方案一样),要么接受一个更简单的解决方案,你可能只需将第一个字母大写并承担后果。

(我知道我会选择哪一个)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38833945

复制
相关文章

相似问题

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