Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何每隔n个非';两个特定文本之间的t?_Javascript_Html_Regex - Fatal编程技术网

Javascript 如何每隔n个非';两个特定文本之间的t?

Javascript 如何每隔n个非';两个特定文本之间的t?,javascript,html,regex,Javascript,Html,Regex,我已经准备好将html插入dom。在此之前,我需要每隔30个字符插入一个标记。这样做很容易: var html = html.replace(/(.{30})/g, '$1<wbr>'); var html=html.replace(/({30})/g,'$1'); 然而,这个简单的解决方案常常会将标签插入到现有的html标签中。例如,这最终可能会发生: <spa<wbr>n> Some text here </span> 这里有一些文本

我已经准备好将html插入dom。在此之前,我需要每隔30个字符插入一个标记。这样做很容易:

var html = html.replace(/(.{30})/g, '$1<wbr>');
var html=html.replace(/({30})/g,'$1');
然而,这个简单的解决方案常常会将标签插入到现有的html标签中。例如,这最终可能会发生:

<spa<wbr>n> Some text here </span>
这里有一些文本
html可能有很多子级,如下所示:

<div>
    This is some text that we need to treat. <br />
    <span> Here is some more text. <a href="#"> Click here. </a> </span>
</div>

这是我们需要处理的一些文本
这里有更多的文本。
最好的方法是什么?正则表达式是一种可能的解决方案吗?还是我需要编写一个javascript函数?我希望我能想出如何编写一个与上面类似的正则表达式,它每n个字符插入一个文本,除非它位于字符“”之间

非常感谢您的帮助。

您可以使用:

(.{30}.*?\s)
工作正则表达式示例:

Javascript:

var html = html.replace(/(.{30}.*?\s)/g, '$1<br />');
var html=html.replace(/(.{30}.*.\s)/g,'$1
');

因此,这将在第30个字符后的下一个空格中插入

标记,因此

不会插入任何单词或标记中。

这是我的解决方案。通常我不想使用jquery,但时间是关键

var el = $('<div>' + html + '</div>');
var allChildren = el.find('*');

allChildren.each(function() {
    for(var i = 0, len = this.childNodes.length; i < len; i++) {
        if(this.childNodes[i].nodeType === 3) {
            var newHtml = this.childNodes[i].nodeValue.replace(/(.{30})/g, '$1<wbr>');
            $(this.childNodes[i]).replaceWith(newHtml);
        }
    }
});

html = el.html();
var el=$(''+html+'');
var allChildren=el.find('*');
allChildren.each(function(){
for(var i=0,len=this.childNodes.length;i
不要
替换HTML字符串中的
。只需在DOM树的所有文本节点上递归,并将它们拆分。您面临的问题是什么?难道不应该有一个CSS解决方案吗?@Bergi,我正在编写一个递归方法,但我真的希望一两行就可以完成。word-wrap:break word很好,但CSS是不可能的unfortunately@Tyler,世界上谁在浏览链接?除非,你知道,有内部html。那么它不是每30个字符。