【问题标题】:Can someone explain this .replace logic?有人可以解释这个 .replace 逻辑吗?
【发布时间】:2013-07-13 22:24:51
【问题描述】:

我正在尝试调整一个脚本,将文本区域中的所有大写文本转换为小写(第一个单词大写)。我的部分问题已解决here

它有效,但是...我的 textarea 文本采用以下格式:破折号、空格,然后是 TEXT。

- TEXT1
- TEXT2
- 文本3

我的脚本和.replace逻辑,不考虑“-”和空格,也不单独考虑每一行。

这是脚本:

$(window).load(function(){
$('#normalize').click(function capitalizeSentences(){

var capText = $("#finaltext").val();
capText = capText.toLowerCase();

capText = capText.replace(/\.\n/g,". [-<br>-]. ");
capText = capText.replace(/\.\s\n/g,". [-<br>-]. ");
var wordSplit = '. ';

var wordArray = capText.split(wordSplit);

var numWords = wordArray.length;

for(x=0;x<numWords;x++) {

    wordArray[x] = wordArray[x].replace(wordArray[x].charAt(0),wordArray[x].charAt(0).toUpperCase());

        if(x==0) {
            capText = wordArray[x]+". ";
        }else if(x != numWords -1){
            capText = capText+wordArray[x]+". ";
        }else if(x == numWords -1){
            capText = capText+wordArray[x];
        }               
}
capText = capText.replace(/\[-<br>-\]\.\s/g,"\n");
capText = capText.replace(/\si\s/g," I ");  
$("#finaltext").val(capText);
});
});

我不遵循 .replace() 部分中的语法或逻辑。是否有关于如何构建逻辑的入门书,或者有人可以给我一个细分,以便我可以更准确地调整它?

【问题讨论】:

  • 两个词:正则表达式:)
  • 那么.replace括号中的逻辑遵循Regex规则?还是 .replace 一个正则表达式命令?这个教程看起来不错,所以我会试一试:regular-expressions.info/characters.html
  • 详情请看我的回答!

标签: jquery replace capitalize


【解决方案1】:

您在代码中看到的是literal format for regular expressions。在文字格式中,您将表达式括在斜杠 (/) 中,并可选择在第二个斜杠之后添加标志。

在您的特定代码示例中:

capText.replace(/\.\n/g,". [-<br>-]. ");

相当于

capText.replace(new RegExp("\.\n", "g"),". [-<br>-]. ");

【讨论】:

  • 实际上,现在我更好地理解了表达式,我可以看到 .replace 表达式对于我的特定需求完全是多余的。这些表达式找到由句点和空格定义的句子的结尾,并处理句子的开头。由于我的文本区域不会被这样的句子填充,我应该废弃借用的代码并从头开始用大写替换破折号和空格后第一次出现的字母。
【解决方案2】:

好的,在阅读了一些 RegEx 和一些试验和错误之后,我(偶然)找到了我的问题的解决方案。

我意识到我改编的剧本中的大部分内容都是无关紧要的垃圾。所以我退后一步,把这个问题一点一点地解决。

首先,我决定将所有文本都渲染成小写:

var capText = $('#finaltext').val();
capText=capText.toLowerCase();

然后,我需要使用 .replace 来查找“破折号+空格+任意字母”的所有实例:

.replace(/- ./g,

这将在所有情况下找到破折号后的一个字母,然后我结合一个函数来制作大写:

.replace(/- ./g, function(c){return c.toUpperCase();});

最终代码是:

$('#normalize').click(function capitalizeSentences() {
    var capText = $('#finaltext').val();
    capText=capText.toLowerCase();
    capText2 = capText.replace(/- ./g,function(c){ return c.toUpperCase(); });
    $("#finaltext").val(capText2);
});

请看这里 - http://jsfiddle.net/fDy6K/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    相关资源
    最近更新 更多