Javascript 不要在一个字符串中计算br和nbsp
我有一个由br和nbsp组成的字符串;标签,我需要的是,我需要限制字符到100,这意味着只有100个字符应该显示,因为每个br需要4个字符,而不是100个字符,我得到108个,得到下面的输出,我可以在一行Javascript 不要在一个字符串中计算br和nbsp,javascript,Javascript,我有一个由br和nbsp组成的字符串;标签,我需要的是,我需要限制字符到100,这意味着只有100个字符应该显示,因为每个br需要4个字符,而不是100个字符,我得到108个,得到下面的输出,我可以在一行 data.substr(0,100) 输出=> 制作一本活字样书是很困难的。它不仅经历了五个世纪,而且还经历了一次飞跃 但它包括br标签我不想删除br和nbsp;但别指望了 预期产出=> 制作一本活字样书是很困难的。它不仅存活了五个世纪,而且还跨越了ele 我做了一些片段,但它给出了108
data.substr(0,100)
输出=>
制作一本活字样书是很困难的。它不仅经历了五个世纪,而且还经历了一次飞跃
但它包括br标签我不想删除br和nbsp;但别指望了
预期产出=>
制作一本活字样书是很困难的。它不仅存活了五个世纪,而且还跨越了ele
我做了一些片段,但它给出了108的计数
var data=`它可以用来制作一本类型样本书。它不仅存活了五个世纪,而且还跨越到电子排版,基本上保持不变。它在20世纪60年代随着包含Lorem Ipsum段落的Letraset表单的发布而流行,最近随着Aldus PageMaker等桌面出版软件的发布,包括Lorem Ipsum版本`
//删除nbsp
var docDesc=data.replace/[&]nbsp[;]/gi;
//删除br
var stringData=docDesc.replace/[]*[>]/gi,;
var子数据=stringData.Substr0100
函数testsubData{
var n=子数据.split;
返回n.sliceMath.maxn.length-5,1
}
var lastData=testsubData;
var lastString=lastData.join
var finalData=data.substring0,data.indexOflastString+lastString
console.logfinalData
console.logfinalData.length以最简单的形式,您可以编写一个类似子字符串的函数,但不包括一些“单词”,如:
function substringWithExcludes(str, excludes, length) {
let idx = 0;
let len = 0;
while(idx < str.length && len < length){
let match = false;
for(let exclude of excludes) {
if(str.startsWith(exclude, idx)) {
idx += exclude.length;
match = true;
break;
}
}
if(!match) {
len++;
idx++;
}
}
return str.substring(0, idx);
}
这被称为:
const data = `it to make a type specimen book. <br>\r\n<br>\r\nIt has survived not only five centuries, but also the leap into electronic typesetting, <br>\r\n<br>\r\nremaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages<br>\r\n<br>\r\n, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.`;
const result = substringWithExcludes(data, ["\r", "\n", " ", "<br>"], 100);
len跟踪字符串的长度,而idx包含这些匹配项。对于每个排除,我们需要做的是,首先查看它是否匹配,以及它是否将长度添加到idx。如果不匹配,则需要包含一个有效字符,并增加len和idx
对于较大的长度和许多排除项,可能会很慢,但它完成了任务。您可以为不区分大小写添加特定的大小写,并在必要时进行匹配。startsWith可以在需要时与正则表达式匹配进行交换。@DILEEP,请查看下面的代码
如果你在理解代码时遇到任何问题,我会尽力回答你
/*
函数接受字符串数据
返回从索引0到默认值100的前100个字符的字符串
根据显式传递的开始和结束值返回字符串
*/
函数get100charsnoccountbrsandspacesdata,start=0,end=100{
var arr=stringtoarr,带有nobsandspacesdata
让arrSpaces=arr.mapitem=>{
返回项目。加入“”
}
让strBrsSpaces=arrSpaces.join“”;//sdd fhhf fhhf fhhf
var finalStr;
var SpaceScont=0;
//
做{
finalStr=strbrspaces.slicestart、end+spacescont
SpaceScont=finalStr.match/\s/gi.length
}
whilefinalStr.slicestart、end+spacescont.split''。join.length<100;
返回finalStr.slicestart,end+spacescont
}
/*
从字符串数据中删除和空格的函数
并返回一个2d数组,它帮助我们重新构造原始字符串
*/
函数stringToArrWithNobsandSpaceSData{
var arrNoBrs=data.split
//console.logJSON.stringifyarrNoBrs,null,4
设arrNoBrsSpaces=arrNoBrs.mapitem=>{
let a=[];//let:a的局部范围
a=项目。拆分“”
返回a;
}
//console.logJSON.stringifyarrNoBrsSpaces,null,4
返回arrNoBrsSpaces
}
/*
函数,用于从2数组重建字符串
在适当的位置添加空格和空格
*/
函数arrhithnobsandspacestostringarray{
让arrSpaces=array.mapitem=>{
返回项目。加入“”
}
console.logarrspace
//console.logarrspace
让strbspaces=arrSpaces.join
返回strbspace
}
//*******测试:StringToArrSwithNobsandSpaces
var inputStr=`它可以用来制作一本类型样本书。它不仅存活了五个世纪,而且还跨越到电子排版,基本上保持不变。它在20世纪60年代随着包含Lorem Ipsum段落的Letraset表单的发布而流行,最近随着Aldus PageMaker等桌面出版软件的发布,包括Lorem Ipsum版本`
var arr=stringtoarwithnobsandspacesinputstr
console.logarr
控制台。日志“\n”
//*******测试:与nobsandspacestostring对齐
var str=arrhithnobsandspacestostringarr
console.logstr
//*******测试:Get100CharsNoCountBr和SpaceSinPutstr
var finalData=get100charsNoCountBrsAndSpacesinputStr
console.log'finalData:',finalData
console.log'Length:',finalData.Length//122 100个字符+22个空格,请参见下一行
console.log“空格数:”,finalData.match/\s/ig.length
console.log“字符数:”,finalData.split“”。join.length//100
/*…**输出:StringToArrSwithNobsandSpacesInputStr**。。。
[
[
信息技术
到
制作
A.
类型
样品
书
],
[
],
[
信息技术
有
幸存下来的,
不
只有
五
世纪,,
但是
而且
这个
跳
进入
电子的
排版,,
],
[
],
[
剩下的
基本上,
不变。,
信息技术
是
普及,,
在里面
这个
20世纪60年代,
具有
这个
释放
属于
莱特拉塞特,
被单,
包含,
洛勒姆,
乱数假文,
通道
],
[
],
[
,,
和
更多
不久前
具有
桌面
出版,,
软件
喜欢
奥尔德斯,
寻呼机,
包括…在内
版本,
属于
洛勒姆,
乱数假文。
]
]
*/
/*…**输出:arrhithnobsandspacestostringarr**。。。
制作一本活字样书是很困难的。它不仅存活了五个世纪,而且还跨越到电子排版,基本上保持不变。它在20世纪60年代随着包含Lorem Ipsum段落的Letraset表单的发布而流行,最近随着Aldus PageMaker等桌面出版软件的发布,包括Lorem Ipsum版本。
*/
/*…**输出:Get100CharsNoCountBr和SpaceSinPutstr**。。。
制作一本活字样书是很困难的。它不仅存活了五个世纪,而且还跨越到电子排版,基本上保持不变。它在20世纪60年代随着包含Lorem Ipsum段落的Letraset表单的发布而流行,最近随着Aldus PageMaker等桌面出版软件的发布,包括Lorem Ipsum版本。
最终数据:制作一本样本书是非常必要的。它不仅存活了五个世纪,而且还跨越了电子排版,
长度:122
空间数:22
字符数:100
*/为什么不能只使用一个简单的regexp?另外,如果您有转义字符,如\,该怎么办?这些将不会被视为转义,并将与您的正则表达式匹配。@ChatterOne我得到的字符串来自ajax响应,因此我无法编辑该字符串。@ChatterOne我需要以相同的对齐方式显示数据,但我需要通过不计算br和nbspYes来将字符限制为100,我理解您的要求,我问您为什么不能使用不同的regexp?