我有一个这样的字符串:
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
答案 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;
请参阅regex101.com上的regex demo。
正则表达式解释:
^
- 行首(由于/m
修饰符)(\[[0-9]*]:)
- 第1组(在替换回调中称为g1
)匹配...
\[
- 打开方括号[0-9]*
- 零个或多个数字]
- 关闭方括号:
- 冒号\s*
- 零个或多个空格(.*)
- 第2组匹配(g2
)除了换行符之外的零个或多个字符\r?\n?
- 一个或零\r
后跟一个或零\n
/gm
- 定义全局搜索和替换,^
匹配行开头而不是字符串开始