如何将以特定模式开头的每一行传输到字符串的末尾?

时间:2016-01-22 06:48:14

标签: javascript regex

我有一个这样的字符串:

var str = " this is a [link][1]
            [1]: http://example.com
            and this is a [good website][2] in my opinion
            [2]: http://goodwebsite.com
            [3]: http://example.com/fsadf.jpg
            [![this is a photo][3]][3]
            and there is some text hare ..! ";

现在我想要这个:

var newstr = "this is a [link][1]
              and this is a [good website][2] in my opinion
              [![this is a photo][3]][3]
              and there is some text hare ..!


                [1]: http://example.com
                [2]: http://goodwebsite.com
                [3]: http://example.com/fsadf.jpg"

我该怎么做?

实际上,变量str是textarea的值......我正在尝试创建一个降价编辑器。所以我想要的是与SO的textarea完全相同。

这是我的尝试:

/^(\[[0-9]*]:.*$)/g在第一行

中选择[any digit]:

我认为我应该使用()为其创建一个组,然后将其替换为\n\n $1

2 个答案:

答案 0 :(得分:2)

试试这个:

strLinksArray = str.match(/(\[\d+\]\:\s*[^\s\n]+)/g);
strWithoutLinks = str.replace(/(\[\d+\]\:\s*[^\s\n]+)/g, ''); //removed all links

在这里,您将获得没有链接的数组和字符串的链接,然后执行您想要的任何更改。

答案 1 :(得分:1)

您可以使用



var re = /^(\[[0-9]*]:)\s*(.*)\r?\n?/gm;                // Regex declaration
var str = 'this is a [link][1]\n[1]: http://example.com\nand this is a [good website][2] in my opinion\n[2]: http://goodwebsite.com\n[3]: http://example.com/fsadf.jpg\n[![this is a photo][3]][3]\nand there is some text hare ..!';
var links = [];                                      // Array for the links
var result = str.replace(re, function (m, g1, g2) {  // Removing the links
  links.push("  " + g1 + " " + g2);                        // and saving inside callback
	return "";                                   // Removal happens here 
});
var to_add = links.join("\n");                   // Join the links into a string
document.getElementById("tinput").value = result + "\n\n\n" + to_add; // Display

<textarea id="tinput"></textarea>
&#13;
&#13;
&#13;

请参阅regex101.com上的regex demo

正则表达式解释

  • ^ - 行首(由于/m修饰符)
  • (\[[0-9]*]:) - 第1组(在替换回调中称为g1)匹配...
    • \[ - 打开方括号
    • [0-9]* - 零个或多个数字
    • ] - 关闭方括号
    • : - 冒号
  • \s* - 零个或多个空格
  • (.*) - 第2组匹配(g2)除了换行符之外的零个或多个字符
  • \r?\n? - 一个或零\r后跟一个或零\n
  • /gm - 定义全局搜索和替换,^匹配行开头而不是字符串开始