\ n javascript / m in javascript regex

时间:2016-07-26 09:23:04

标签: javascript regex

我理解:

  

\n代表换行。

     

/m代表多行匹配。

我已经写了一个关于它的小例子:



$('button').click(function () {
  var reg = /(<span>)(\n?)([\[\w\s\.\]]+)(\2)/g;
  var div = $('body > div');
  div.html(div.html().replace(reg, '$1$2[edited...]$4'));
  $('body').append($('<p>').text(div.html()))
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  [div text...]
  <div>
    [child div text...]
  </div>
  <span>
    [child span text 1...]
  </span>
  
  <br />
  
  <span>
    [child span text 2...]
  </span>
</div>
<button>click me</button>
&#13;
&#13;
&#13;

它会做出一些改变:

1 /。找到所有<span>代码。

2 /。将每个代码的文字替换为[edited...]

3 /。显示父html再次检查。

工作正常。

以下是我的问题:

var reg = /(<span>)(\n?)([\[\w\s\.\]]+)(\2)/g;

(<span>):启动span标记。

(\n?):新行(如果需要)。

([\[\w\s\.\]]+):代表[child span text 1/2...]

(\2):新行(如果需要)。

1 /.为什么没有结束span标记(<\/span>)会有效?我的意思是:它包括结尾标签,但我不需要。

2 /.在替换中:.replace(reg, '$1$2[edited...]$4')。我只是不需要自动添加</span>代码。如果我有案例可能会有问题:

Hey regex, I don't require it. But why are you done it?

可能是:所有现代浏览器都足够聪明,我需要一个结束标记(</span>)。但是,我正在使用正则表达式和字符串,而不是使用HTML。

那么,是否应该在未来进行编辑?

3 /.如果我从正则表达式中删除(\n?)(\2)。它仍然有效:

&#13;
&#13;
$('button').click(function () {
  var reg = /(<span>)([\[\w\s\.\]]+)/g;
  var div = $('body > div');
  div.html(div.html().replace(reg, '$1[edited...]'));
  $('body').append($('<p>').text(div.html()))
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  [div text...]
  <div>
    [child div text...]
  </div>
  <span>
    [child span text 1...]
  </span>
  
  <br />
  
  <span>
    [child span text 2...]
  </span>
</div>
<button>click me</button>
&#13;
&#13;
&#13;

这种情况的结果相同:

var reg = /(<span>)([\[\w\s\.\]]+)/gm;

显然,\n/m不是必需的。如果我添加或不添加,它都可以正常工作。

那么,\n/m是否相似?

1 个答案:

答案 0 :(得分:1)

  1. 它不会影响</span>标记,但由于它位于源代码中,它将在输出中保持不变。

  2. 应该对其进行编辑,但这只是因为您不应该使用正则表达式解析HTML。

  3. 您要匹配的内容列表为[\[\w\s\.\]]+\s包含\n,因此如果您之前有(\n?),则不会更改任何内容。< / p>

  4. 不要使用正则表达式。

    $('button').click(function () {
      var div = $('body > div');
      div.find("span").text("[edited...]");
      $('body').append($('<p>').text(div.html()));
    })
    

    完成...