Javascript 每个新词的大写字母瑞典语字符和html标记

Javascript 每个新词的大写字母瑞典语字符和html标记,javascript,regex,Javascript,Regex,有人向我指出这篇文章似乎不符合我的标准: 我正在尝试制作一个正则表达式,它将: 通过为每个单词的第一个字母添加大写字母,并为其余字符添加小写字母来格式化字符串 忽略HTML标记 接受瑞典语字符(åäÄÖ) 假设我有这个字符串: <b>app</b>le store östersund apple storeöstersund 然后我希望它是(由大写字符标记的更改) Apple StoreÖstersund 我一直在玩弄它,最接近我的是: (?!([^)[åää

有人向我指出这篇文章似乎不符合我的标准:

我正在尝试制作一个正则表达式,它将:

  • 通过为每个单词的第一个字母添加大写字母,并为其余字符添加小写字母来格式化字符串
  • 忽略HTML标记
  • 接受瑞典语字符(åäÄÖ)
假设我有这个字符串:

<b>app</b>le store östersund
apple storeöstersund
然后我希望它是(由大写字符标记的更改)

Apple StoreÖstersund
我一直在玩弄它,最接近我的是:

(?!([^)[åääÄÖ]|\s\b\w

导致

<b>app</b>le Store Östersund
<B>App</B>Le store Östersund
apple StoreÖstersund
还是这个

/(?!([^)[åääÄÖ]|\S\b\w/g

导致

<b>app</b>le Store Östersund
<B>App</B>Le store Östersund
AppLe storeÖstersund
这是一把小提琴:


非常感谢任何帮助或建议。

单独使用regexp是不可能的,因为regexp不理解HTML结构。[*]相反,我们需要处理每个文本节点,并在一个词在不同的文本节点之间继续时,执行该词开头的逻辑。如果一个字符前面有空格,或者如果它位于字符串的开头,并且它是第一个文本节点,或者前一个文本节点以w结尾,则该字符位于该词的开头hitespace

函数HtmlTitleCase(html,字母){ 设div=document.createElement('div'); 设re=newregexp((^ |\\s)([“+字母+”)”),“gi”); div.innerHTML=html; 让treeWalker=document.createTreeWalker(div,NodeFilter.SHOW_TEXT); 让startOfWord=true; while(treeWalker.nextNode()){ 让节点=treeWalker.currentNode; node.data=node.data.replace(re,函数(匹配,空格,字母){ if(空格| |开始字){ 返回空格+字母.toUpperCase(); }否则{ 复赛; } }); startOfWord=node.data.match(/\s$/); } 返回div.innerHTML; } log(htmltitlecase(“applestoreöstersund”,“a-zåäö”);
//苹果商店Östersund我有一个几乎只使用正则表达式的解决方案。这可能不是最直观的方法,但它应该是有效的,而且我觉得很有趣:)

您必须在字符串的末尾追加每个小写字符,后跟它们的大写对应字符,如下所示(它前面还必须有一个空格,用于存放我的正则表达式):
aabbccddeffgghhiijkkllmmnnooppqqrrsttuuvwwxxyzzåääÄÖ

(我不知道丢失了哪些字母,我对瑞典语字母表一无所知,对不起……我指望你能帮我更正!)

然后可以使用以下正则表达式:
(?![^)(\s |\s |^)([\wåäö])(?=.\2()\s*$)|[\wåäääöÖ]+$

替换为:
$1$3


测试它


这是一个有效的javascript代码:

//初始化
变量regex=/(?![^)(\s|\s|^)([\wåäö])(?=.\2(.)\s*$)|[\wååääÖ]+$/g;
var string=“test apple storeöstersund”;
//加工
结果=字符串+“AABBCCDDEEFFGGHHIIJKKLMNNOOPQQRRSSTTUUVWWXXYYZZåäÄÖ”;
结果=结果.替换(regex,“$1$3”);
//显示结果

console.log(结果)
即使只是指定非常简单的html标记?我现在真正需要介绍的是和。哦,等等,刚刚看到你编辑的答案。我会检查一下。谢谢你的努力。只要html标记不完整,它就应该处理。哇,这几乎完美了!但是如果说
苹果商店,它就失败了Östersund
。第一个a也应该大写:)为了记录,你敲定了瑞典字母。@EntiendNull是的,我刚刚看到,现在应该可以了:)太好了!谢谢你的努力!:@EntiendNull随时都可以!我写这个正则表达式很开心:)为了记录,如果你需要在字母表中添加字母,请将它们添加到附加的字符串和两组括号中
[\wåäö]
(仅小写)和
[\wåäääöÖ]
(小写和大写)