Javascript正则表达式替换并添加所有元素发现到数组

时间:2015-08-22 15:58:01

标签: javascript jquery arrays regex

目前我很困惑!我一直试图解决这个问题,似乎无法破解它。我甚至无法在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个空格),然后我想将匹配的内容添加到数组中。 我该怎么做呢?请帮助!

2 个答案:

答案 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)];
});