【问题标题】:javascript: can someone explain the codejavascript:有人可以解释一下代码吗
【发布时间】:2016-11-21 17:43:02
【问题描述】:

我昨天问了一个问题。如何只删除标签名,以及使用jquery删除包含昨天内容的标签名。

答案是使用正则表达式。

有人可以为我解释一下下面的代码只是正则表达式部分吗?

我已经阅读了一些关于正则表达式的文章,但我认为我并没有完全理解清楚。

如果可能的话,我想将其转换为 c# 代码,但我还不能这样做,因为我不完全理解代码。谢谢

第一个代码

$(function() {
  function removeNode(str, nodeName) {
    var pattern = '<'+nodeName+'>[\\s\\w]+<\/'+nodeName+'>';
    var regex = new RegExp(pattern, 'gi');
    return str.replace(regex, '').replace(/^\s*[\r\n]/gm, '');
  }

我在第一个代码中不明白的是“gi”是从哪里来的? 和返回

var regex = new RegExp(pattern, 'gi');
        return str.replace(regex, '').replace(/^\s*[\r\n]/gm, '');

第二个代码

$(function() {
  function removeNodeButRetain(str, nodeName) {
    var pattern = '<\/?'+nodeName+'>';
    var regex = new RegExp(pattern, 'gi');
    return str.replace(regex, '').replace(/^\s*[\r\n]/gm, '');
  }

  what i dont understand is the 

 var regex = new RegExp(pattern, 'gi');
        return str.replace(regex, '').replace(/^\s*[\r\n]/gm, '');

第三个代码

jQuery(document).ready(function(){
textval = $('textarea').val();
textnewval = textval.replace('Para TextBreak="No"', 'p').replace('/Para', '/p'); 

  if(textnewval.indexOf('Italic') >= 0) //If Italic
{
    EmphasisAttr = 'Italic';
  textnewval = textnewval.replace('Emphasis Type="'+EmphasisAttr+'"', 'i').replace('/Emphasis', '/i'); 
}
if(textnewval.indexOf('Bold') >= 0) //If Bold
{
    EmphasisAttr = 'Bold';
  textnewval = textnewval.replace('Emphasis Type="'+EmphasisAttr+'"', 'b').replace('/Emphasis', '/b'); 
}
if(textnewval.indexOf('Underline') >= 0) //If underline
{
    EmphasisAttr = 'Underline';
    textnewval = textnewval.replace('Emphasis Type="'+EmphasisAttr+'"', 'u').replace('/Emphasis', '/u'); 
}


  $('textarea').val(textnewval);
  alert($('textarea').val());
});

【问题讨论】:

  • 如果您在确定正则表达式匹配的内容时遇到问题,请使用此站点regexr.com,当我需要将正则表达式用于具有引用的内容以及现场操场时,我会一直使用它您可以在哪里测试正则表达式模式
  • 先生,您能向我解释一下这部分吗? var regex = new RegExp(pattern, 'gi'); return str.replace(regex, '').replace(/^\s*[\r\n]/gm, '');
  • 第一行使用模式和 g 和 i 标志创建一个新的正则表达式,最后一个使用匹配模式的替换
  • 也可以使用 jQuery 来完成所有这些操作而无需正则表达式
  • 或者因为您想在 C# 中执行此操作,请使用 System.Xml 命名空间来操作 xml

标签: javascript jquery


【解决方案1】:

正则表达式:http://regexr.com/3dr56

将匹配包含以下内容的任何节点:

&lt;div&gt;hello world&lt;/div&gt;

前提是传递给函数的参数:

function removeNode(str, nodeName) {
   var pattern = '<'+nodeName+'>[\\s\\w]+<\/'+nodeName+'>';
   var regex = new RegExp(pattern, 'gi');
   return str.replace(regex, '').replace(/^\s*[\r\n]/gm, '');
}

console.log("Node: <div>hello world</div>");

var str = removeNode("hello world", "div");

console.log("String returned: " + str);

是:

节点匹配:&lt;div&gt;hello world&lt;/div&gt;

removeNode("hello world", "div"); 将返回:

hello world

函数本身将返回节点内的string

更多信息可以在这里找到Regular Expressions

【讨论】:

    【解决方案2】:

    值得一提的是,这是一个仅使用 jQuery 完成的解决方案。

    您可以使用服务器端 XML 解析器做类似的事情

    用于搜索和替换的数据:

      // selector = jQuery selector, final = replacement element
      var tags = [{
          selector: 'emphasis[Type="Italic"]',
          final: '<i>'
        }, {
          selector: 'emphasis[Type="Bold"]',
          final: '<strong>'// note <b> is deprecated
        }, {
          selector: 'emphasis[Type="Underline"]',
          final: '<u>'
        }, {
          selector: 'para',
          final: '<p>'
        }
      ];
    

    解析器:

    $(function() {
    
      // get string to parse
      var str = $('#txtArea').val();
      // inject in temporary div
      var $tempdiv = $('<div>').html(str);
      // loop over all the tags to replace
      $.each(tags, function(_, tag) {
        // loop and replace instances of tags
        $tempdiv.find(tag.selector).replaceWith(function() {
          return $(tag.final).html( $(this).html())
        });
      });
      // get final string from temp div
      var finalString = $tempdiv.html()
      // update textarea
      $('#final').val(finalString );
    });
    

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      相关资源
      最近更新 更多