如何用for/while循环不使用正则实现JS点分隔句子首单词全大写
调整思路
- 新增一个标记变量
isNextWordSentenceStart,用来判断当前遍历到的单词是不是句子的第一个单词,初始值设为true,因为文本第一个单词必然是第一个句子的开头。 - 遍历拆分后的单词数组时:
- 如果当前是句子开头的单词,直接将整个单词转为全大写,然后将标记设为
false - 如果不是句子开头的单词,保留原样即可
- 每次遍历完当前单词后,判断该单词是否以英文句号
.结尾,如果是,就把标记重新设为true,说明下一个单词是新句子的开头
- 如果当前是句子开头的单词,直接将整个单词转为全大写,然后将标记设为
- 最后把处理后的数组拼接回字符串即可
调整后的完整代码
<p id="tekst">This is an. Example text. To showcase. What i want</p> <script> function highlight() { var text = document.getElementById("tekst").innerHTML; let arr = text.split(" "); // 标记下一个单词是否为句子开头 let isNextWordSentenceStart = true; for (var i = 0; i < arr.length; i++) { if (isNextWordSentenceStart) { // 句子开头单词全大写 arr[i] = arr[i].toUpperCase(); isNextWordSentenceStart = false; } // 检查当前单词是否以句号结尾,是则下一个是句子开头 if (arr[i].endsWith('.')) { isNextWordSentenceStart = true; } } const str2 = arr.join(" "); console.log(str2); } // 调用测试 highlight(); </script>
运行效果验证
输入测试文本处理后输出结果为:
THIS is an. EXAMPLE text. TO showcase. WHAT i want
和你预期的结果完全一致,且全程只使用了for循环,没有用到正则表达式,符合要求。
内容的提问来源于stack exchange,提问作者Fred Lu
相关产品推荐
相关产品推荐

