如何编写将使用嵌套标签修剪HTML文本的正则表达式?

时间:2018-03-02 06:31:34

标签: javascript regex string

试图找到一个可以转换的正则表达式:

"    <p>   Some text <span> with another text   </span>    </p>  "

成:

"<p>Some text <span> with another text</span></p>"

问题是我无法找到从左右两侧留下的群组标签的解决方案。

到目前为止我创建的是:

/((?:^(?:\s|(?:<[\/]*[\w]+>))+)|(?:\s|(?:<[\/]*[\w]+>))+$)/

这可能是一种解决方法,但它将是两步解决方案(首先:找到左侧和右侧,第二个删除标签之外的空格)。

寻找更优雅的东西,这将通过使用正则表达式进行一次替换来解决我的问题。提前谢谢!

1 个答案:

答案 0 :(得分:0)

这个解决方案不是正则表达式,但它有效:

function trimElement(root, recursive=false){
  let todo = [root];
  while(todo.length){
    let elm = todo.pop();
    if(recursive) 
      todo.push(...elm.children);

    if(elm.nodeName.toLowerCase() === "script") continue;

    const {firstChild, lastChild} = elm;
    if(firstChild.nodeType === 3)
      firstChild.data = firstChild.data.trimLeft();

    if(lastChild.nodeType === 3)
      lastChild.data = lastChild.data.trimRight();
  }
  
  console.log(root.outerHTML);
}


trimElement(document.querySelector("div"), true);
<div>
    <p>   Some text <span> with another text   </span>    </p>  
</div>