【问题标题】:Javascript regEx: wrap words and spaces into tagsJavascript regEx:将单词和空格包装到标签中
【发布时间】:2012-10-06 09:19:01
【问题描述】:

我一直在尝试实现这一点:我想将单词包装到标签中,并在标签中包含空格(可能是多个),假设原始文本可以包含不应被触及的 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>

实现这一目标的正确正则表达式是什么?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    你应该使用两个替换>>

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

    检查this demo


    编辑

    对于更复杂的输入(基于您在下面的评论),请使用 >>

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

    检查this demo

    【讨论】:

    • 你能解释一下(?=...) 部分吗?
    • @SeanVaughn - Part (?=\s) 表示“后跟空格”
    • 很好,但是是否可以修改您的解决方案以处理“复杂”标签,例如 very bold 而不是 very粗体?
    • 不适用于嵌套元素jsfiddle.net/EfzW8/1(“粗体”未包含在 中)。您可以根据需要添加任意数量的特殊情况,我总会找到一个反例根据定义 en.wikipedia.org/wiki/Chomsky_hierarchy#The_hierarchy
    • @Prinzhorn - 首先,OP 要求提供正则表达式解决方案,因此很高兴找到最接近的正则表达式解决方案。您最近的示例有 data-foo="&lt;bar&gt;" 标签参数,这是可能的,但不太可能。由于我不知道 OP 需要解析什么样的 HTML 源代码,所以很难说我们必须走多远的正则表达式复杂性。我相信我最近的代码应该适用于 OP。
    【解决方案2】:

    正则表达式并不适合所有任务。如果您的字符串可以包含任意 HTML,则无法使用正则表达式处理所有情况,因为 HTML 是一种上下文无关的语言,而正则表达式仅涵盖其中的一部分。现在,在搞乱循环和大量代码来处理这个问题之前,让我提出以下建议:

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

    这是一个使用我几个月编写并现在更新的库的示例,称为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);
    

    示例:http://prinzhorn.github.com/Linguigi/(点击Stackoverflow 12758422 按钮)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-23
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      相关资源
      最近更新 更多