我理解:
\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;
它会做出一些改变:
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)
。它仍然有效:
$('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;
这种情况的结果相同:
var reg = /(<span>)([\[\w\s\.\]]+)/gm;
显然,\n
和/m
不是必需的。如果我添加或不添加,它都可以正常工作。
那么,\n
和/m
是否相似?
答案 0 :(得分:1)
它不会影响</span>
标记,但由于它位于源代码中,它将在输出中保持不变。
应该对其进行编辑,但这只是因为您不应该使用正则表达式解析HTML。
您要匹配的内容列表为[\[\w\s\.\]]+
,\s
包含\n
,因此如果您之前有(\n?)
,则不会更改任何内容。< / p>
不要使用正则表达式。
$('button').click(function () {
var div = $('body > div');
div.find("span").text("[edited...]");
$('body').append($('<p>').text(div.html()));
})
完成...