目前我很困惑!我一直试图解决这个问题,似乎无法破解它。我甚至无法在Google上找到答案。
目前我正在使用我在Javascript中编写的正则表达式:
((?: {4,}|\t+)(?:.*))
简单地说,它匹配4个空格的所有内容或者textarea中的1 +个标签。是的,你觉得这听起来很熟悉?这就是Stack Overflow对代码块的作用。现在,我遇到了一个问题。
基本上我想要替换textarea中找到的所有这些实例,但首先我要将它们备份到数组中。现在,我不确定如何抓住找到的每个匹配项,并将其插入到数组中。
这是我到目前为止所做的:
.replace(/((?: {4,}|\t+)(?:.*))/gi, function (m, g1, g2) {
return //STUCK HERE
}); //Matches Bold
如此简单,我只想抓住在textarea中找到的所有匹配(缩进或4个空格),然后我想将匹配的内容添加到数组中。 我该怎么做呢?请帮助!
答案 0 :(得分:1)
如果您想获得array
个匹配项,可以使用match()
函数:
var matchesArray = $('textarea').val().match('/((?: {4,}|\t+)(?:.*))/gi');
如果您想要替换,请使用简单的replace()
函数:
$('textarea').val().replace('/((?: {4,}|\t+)(?:.*))/gi', 'replaceWith');
希望这有帮助。
答案 1 :(得分:1)
你可以用一颗子弹击中两个目标:
var items = [];
var re = /((?: {4,}|\t+)(?:.*))/g;
textarea.value = textarea.value.replace(re, function ($0, $1) {
items.push($1);
return 'replacement';
});
如果你想获得代码块:
var codeLines = [];
var reMarkers = /\{\{(.*?)\}\}/g;
var reCodeBlocks = /((?: {4,}|\t+)(?:.*))/g;
var text = textarea.value;
// save and remove code blocks
text = text.replace(reCodeBlocks, function ($0, $1) {
var marker = '{{' + codeLines.length + '}}';
codeLines.push($1);
return marker;
});
// revert to previous state
text = text.replace(reMarkers, function ($0, $1) {
return codeLines[parseInt($1, 10)];
});