javascript:有人可以解释代码

时间:2016-07-19 01:23:27

标签: javascript jquery

我昨天问了一个问题。如何仅删除标记名称,并使用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());
});

2 个答案:

答案 0 :(得分:4)

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

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

<div>hello world</div>

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

&#13;
&#13;
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);
&#13;
&#13;
&#13;

是:

节点匹配:<div>hello world</div>

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

hello world

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

有关Regular Expressions的更多信息,请点击此处。

答案 1 :(得分: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