Javascript HTML代码文本中的新行使文本长度不同。如何修复它?

Javascript HTML代码文本中的新行使文本长度不同。如何修复它?,javascript,jquery,html,Javascript,Jquery,Html,对不起,我的英语很差 在创建我的私人投资组合网站时,我发现 textTest1(); textTest2(); 函数textTest1(){ var pText1=$('p.textTest1').text(); var newString=''; 对于(var i=0;i而言,主要问题是空格(空格和新行)。我们可以通过这样做看到这一点: var pText1=$('p.textTest1').text(); var pText2=$('p.textTest2').text(); conso

对不起,我的英语很差

在创建我的私人投资组合网站时,我发现

textTest1();
textTest2();
函数textTest1(){
var pText1=$('p.textTest1').text();
var newString='';

对于(var i=0;i而言,主要问题是空格(空格和新行)。我们可以通过这样做看到这一点:

var pText1=$('p.textTest1').text();
var pText2=$('p.textTest2').text();
console.log(“'+pText1+”,pText1.length);
console.log(“'+pText2+”,pText2.length);
//要解决此问题,一种解决方案是去除所有非字母数字字符:
pText1=pText1.替换(/\W+/g',);
pText2=pText2.替换(/\W+/g',);
console.log(“'+pText1+”,pText1.length);
console.log(“'+pText2+”,pText2.length);
//更好的是,让我们创建一个只处理多余空白的函数。
函数cleanText(str){
//修剪开头和结尾处的所有空白
str=str.trim();
//用一个空格替换所有空白(新行、多余空格)
str=str.replace(/\s+/g',);
返回str;
}
log('cleanText():');
pText1=cleanText($('p.textTest1').text());
pText2=cleanText($('p.textTest2').text());
console.log(“'+pText1+”,pText1.length);
console.log(“'+pText2+”,pText2.length);

文本测试

正文 测试

  • 首先,调用删除前导空格和尾随空格
  • 然后调用删除单词之间的空格、新行和回车,并使用单个空格
此外,您不需要在字符串上循环以获取其长度,只需使用
.length
属性:

函数getTrueLength(str){ //修剪前导和尾随空格,然后替换空格, //返回和中间空间中的新行 返回str.text().trim().replace(/(\s+\r+\n+/,“”)长度; } log('text1的总索引为'+getTrueLength($('p.textTest1'))); log('text2的总索引为'+getTrueLength($('p.textTest2'));

文本
测试

正文 测试


使用正则表达式删除新行和制表符

<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
    <p class="textTest1">text test</p>   
    <p class="textTest2">
        text 
        test
    </p>
    <script>
        textTest1();
        textTest2();

        function textTest1(){
            var pText1 = $('p.textTest1').text();
            var newString ='';
            for(var i=0;i<pText1.length;i++){
                console.log('total index of text1 is'+ i);
            }
        }
        function textTest2(){
            var pText2 = $('p.textTest2').text()
                            .replace(/\n/g, '')
                            .replace(/\t/g, ''); // and any other replace you want

            console.log(pText2);
            var newString2 ='';
            for(var i=0; i<pText2.length;i++){
                console.log('total index of text2 is' + i);
            }
        }
    </script>
</body></html>

文本测试

正文 测试

textTest1(); textTest2(); 函数textTest1(){ var pText1=$('p.textTest1').text(); var newString=''; 对于(var i=0;i使用:

这将匹配除空格以外的任何内容,将它们放入数组中,然后仅通过一个空格将它们连接起来。工作示例如下:

textTest1();
textTest2();
函数textTest1(){
var pText1=$('p.textTest1').text();
log(pText1.match(/[^\s]+/g).join(“”).length);
log(pText1.match(/[^\s]+/g).join(“”));
}
函数textTest2(){
var pText2=$('p.textTest2').text();
log(pText2.match(/[^\s]+/g).join(“”).length);
log(pText2.match(/[^\s]+/g).join(“”);
}

文本测试

正文 测试


所以,用替换方法删除空格应该可以解决问题。我想对了吗?是的,试试看。为什么这个答案被否决了?肯定有一些喜欢触发的用户。@SANM2009:我否决了,因为OP已经知道问题的原因。我不知道这是一个怎样的答案。为什么“喜欢触发”?@rockstar他正在寻找解决问题的方法。我已经提供了这个方法。重复@emil谢谢你提供了一个很棒的链接。我真的没想到替换方法会解决问题。这就是我发布这个问题的原因。嘿..意味着我应该了解更多。谢谢你提供了一个很棒的链接!@FrankerZ抱歉。我忘记接受了..忽略那些失败的投票者,他们bust已经诞生了专业的程序员,我们中的其他人在陷入困境时从提问中学习。从字符集中删除
++
。它被解释为一个实际的
++
字符,因此被排除在外。
pText1.match(/[^\s]++/g)
你也可以用
\s
来缩短它。
pText1.match(/\s++/g)
pText1.match(/[^\s]+/g).join(' ');