繁体   English   中英

Javascript regEx:将单词和空格包装成标签

[英]Javascript regEx: wrap words and spaces into tags

我一直在努力实现这个目标:我想在标签中将单词包装成标签和空格(可能是多个),假设原始文本可以包含不应该被删除的html标签

This is   <b>very bold</b> word. 

转换为 - >

<w>This</w><s> </s><w>is</w><s>   </s><b><w>very</w><s> </s><w>bold</w></b><s> </s><w>word</w>

什么是正确的regEx来实现这一目标?

你应该使用两个替换>>

s.replace(/([^\s<>]+)(?:(?=\s)|$)/g, '<w>$1</w>').replace(/(\s+)/g, '<s>$1</s>')

查看此演示


编辑

对于更复杂的输入(根据下面的评论),请使用>>

s.replace(/([^\s<>]+)(?![^<>]*>)(?:(?=[<\s])|$)/g, '<w>$1</w>').replace(/(\s+)(?![^<>]*>)/g, '<s>$1</s>');

查看此演示

正则表达式不适合所有任务。 如果你的字符串可以包含任意HTML,那么就不可能使用正则表达式处理所有情况,因为HTML是一种无上下文的语言,而正则表达式只包含它们的一部分。 现在在搞乱循环和一大堆代码来处理这个问题之前,让我建议如下:

如果您在浏览器环境中或可以访问DOM库,则可以将此字符串放在临时DOM元素中,然后处理文本节点,然后再读取字符串。

这是一个使用我写了一个月的lib的例子,现在更新了,叫做Linguigi

var element = document.createElement('div');
element.innerHTML = 'This is   <b>very bold</b> word.';

var ling = new Linguigi(element);

ling.eachWord(true, function(text) {
    return '<w>' + text + '</w>';
});

ling.eachToken(/ +/g, true, function(text) {
    return '<s>' + text + '</s>';
});

alert(element.innerHTML);

示例: httpStackoverflow 12758422 (点击Stackoverflow 12758422按钮)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM