javascript中的标题大小写和缩写
title casing and Abbreviations in javascript
我正在尝试将一些包含公司名称及其股票代码的文本标题化。
示例(这些字符串被连接为公司名称,该名称采用标题大小写,符号在括号中):AT&T (T)
约翰迪尔公司(DE)
这些公司名称来自我们的数据库,该数据库从股票定价服务中提取它们。我让它工作,除了名字是缩写的时候,比如AT&T
这是return,你猜对了,就像At&t一样。如何在缩写中保留大小写?我想使用indexof来获取任何& & &的位置,并将其两侧的两个字符大写,但这似乎有点粗俗。
(伪代码)
var indexPos = myString.indexOf("&");
var fixedString = myString.charAt(indexPos - 1).toUpperCase().charAt(indexPos + 1).toUpperCase()
哎呀,忘了包含titlecase函数
function toTitleCase(str) {
return str.replace(/([^'W_]+[^'s-]*) */g, function (txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
}
有更好的建议吗? 一个更好的标题大小写函数可能是
function toTitleCase(str) {
return str.replace(
/('b.)|(.)/g,
function ($0, $1, $2) {
return ($1 && $1.toUpperCase()) || $2.toLowerCase();
}
);
}
toTitleCase("foo bAR&bAz a.e.i."); // "Foo Bar&Baz A.E.I."
这仍然会将AT&T转换为AT&T,但是在编写它的方式中没有信息来知道该做什么,所以最后
// specific fixes
if (str === "At&T" ) str = "AT&T";
else if (str === "Iphone") str = "iPhone";
// etc
// or
var dict = {
"At&T": "AT&T",
"Iphone": "iPhone"
};
str = dict[str] || str;
当然,如果你一开始就能正确输入数据,就会省去很多麻烦
这是标题大小写的一般解决方案,无需考虑"缩写"的额外要求:
var fixedString = String(myString).toLowerCase().replace(/'b'w/g, String.toUpperCase);
虽然我同意其他海报的观点,但最好首先以正确的格式开始数据。并不是所有的专有名称都符合标题大小写,只有几个例子是"Werner von Braun"answers"Ronald McDonald"。没有任何算法可以编程到计算机中来处理通常是任意大写的专有名称,就像你不能真正编程计算机来检查专有名称的拼写一样。
然而,您当然可以在某些例外情况下编程,尽管我仍然不确定简单地假设任何带有&号的单词都应该是大写的。但这可以像这样完成:
var titleCase = String(myString).toLowerCase().replace(/'b'w/g, String.toUpperCase);
var fixedString = titleCase.replace(/'b'w*'&'w*'b/g, String.toUpperCase);
请注意,您的第二个示例"约翰迪尔公司(DE)"仍然没有得到正确处理。我想你可以添加一些其他的逻辑,比如,把所有的单词放在括号之间,用大写,像这样:
var titleCase = String(myString).toLowerCase().replace(/'b'w/g, String.toUpperCase);
var titleCaseCapAmps = titleCase.replace(/'b'w*'&'w*'b/g, String.toUpperCase);
var fixedString = titleCaseCapAmps.replace(/'(.*')/g, String.toUpperCase);
至少可以正确处理你的两个例子
这样如何:由于在证券交易所注册的公司数量是有限的,而且股票代码和公司名称之间有一个定义良好的映射,您最好的方法可能是将这种映射编程到您的代码中,通过股票代码缩写查找公司名称,像这样:
var TickerToName =
{
A: "Agilent Technologies",
AA: "Alcoa Inc.",
// etc., etc.
}
然后从股票代码中查找公司名称:
var symbol = "T";
var CompanyName = TickerToName[symbol] || "Unknown ticker symbol: " + symbol;
当然,如果没有某种Web服务,你可以调用从股票代码中获取公司名称,我会非常惊讶,就像下面这个线程:股票代码查找API
或者可能在股票定价服务中有一些类似的功能,您首先使用它们来获取数据。
上次我遇到这种情况时,我决定在需要的时候简单地在这里和那里包含一些例外情况,这会减少麻烦。
var titleCaseFix = {
"At&t": "AT&T"
}
var fixit(str) {
foreach (var oldCase in titleCaseFix) {
var newCase = titleCaseFix[oldCase];
// Look here for various string replace options:
// http://stackoverflow.com/questions/542232/in-javascript-how-can-i-perform-a-global-replace-on-string-with-a-variable-insi
}
return str;
}
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- JavaScript Regex(?i)选项中字符串大小写不敏感的部分不起作用
- 如何使后缀函数不区分大小写
- 如何在JavaScript中按大小写拆分字符串
- 将文本更改为驼色大小写
- 使搜索不区分大小写
- 获取元素内部的缩写
- Regex:匹配以“AM”结尾的单词(不区分大小写比较)
- 如何使用jQuery进行不区分大小写的搜索
- php将代码缩写为jquery
- 时刻时区.js允许我传递时区缩写并获取转换后的日期/时间
- Javascript 将 unicode 字符串转换为“标题大小写”
- 正则表达式匹配整个字符串,但大小写不敏感
- 在 JavaScript 函数中切换大小写
- Aurelia,ES6和类名大小写
- 一个脚本中有多个自调用函数的错误:分号的大小写
- 将字符串添加到不区分大小写的 RegExp 中替换的事物开始
- 首字母缩写和首字母缩略词的命名惯例,通常为大写
- regex,用于修改单词末尾特定大小写的字符
- javascript中的标题大小写和缩写