我使用正则表达式将wiki标记代码基本转换为可复制的纯文本,我正在使用javascript来完成工作。
然而,javascript的正则表达式引擎的行为与我以前使用的那些以及我每天使用的Notepad ++中的正则表达式大不相同。
例如 - 给定一个测试字符串:
==Section Header==
===Subsection 1===
# Content begins here.
## Content continues here.
我想最终:
Section Header
Subsection 1
# Content begins here.
## Content continues here.
只需删除所有等号。
我从正则表达式设置开始:
var reg_titles = /(^)(=+)(.+)(=+)/
此正则表达式搜索以一个或多个等于另一个等于一个或多个等于的行开头的行。 Rubular显示它与我的线条准确匹配,并且在比赛中间没有捕获等号。 http://www.rubular.com/r/46PrkPx8OB
基于正则表达式替换字符串的代码
var lines = $('.tb_in').val().split('\n'); //use jquery to grab text in a textarea, and split into an array of lines based on the \n
for(var i = 0;i < lines.length;i++){
line_temp = lines[i].replace(reg_titles, "");
lines[i] = line_temp; //replace line with temp
}
$('.tb_out').val(lines.join("\n")); //rejoin and print result
遗憾的是我的结果:
Section Header==
Subsection 1===
# Content begins here.
## Content continues here.
我无法弄清楚为什么正则表达式替换函数,当它找到多个匹配时,似乎只替换它找到的第一个实例,而不是所有实例。
即使我的正则表达式更新为: var reg_titles = /(= {2,})/
“查找任意两个或更多等于”,输出仍然相同。它只进行一次替换并忽略所有其他匹配。
没有一个正则表达式表达式执行程序对我这样做。多次运行相同的替换无效。
关于如何获取我的字符串替换函数的任何建议来替换匹配的正则表达式的所有实例而不仅仅是第一个?
答案 0 :(得分:3)
答案 1 :(得分:2)
添加g
修饰符进行全局搜索:
var reg_titles = /^(=+)(.+?)(=+)/g
答案 2 :(得分:1)
你的正则表达式是不必要的复杂,但实际上并没有实现你的目标。 :)您可能会尝试这样的事情:
var reg_titles = /^=+(.+?)=+$/;
lines = $('.tb_in').val().split('\n');
lines.forEach(function(v, i, a) {
a[i] = v.replace(reg_titles, '$1');
})
$('.tb_out').val(lines.join("\n"));