我有一个字符串,如hello _there_.我想,以取代两个下划线<div>并</div>分别使用JavaScript的.输出(因此)看起来像hello <div>there</div>.该字符串可能包含多对下划线.
我所寻找的是一个方法来无论是运行在每场比赛,红宝石做它的方式的函数:
"hello _there_".gsub(/_.*?_/) { |m| "<div>" + m[1..-2] + "</div>" }
Run Code Online (Sandbox Code Playgroud)
或者能够引用匹配的组,再次以红宝石的方式完成:
"hello _there_".gsub(/_(.*?)_/, "<div>\\1</div>")
Run Code Online (Sandbox Code Playgroud)
任何想法或建议?
请考虑以下代码:
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
var str = '<12> rnbqkb-r Rnbq-b-r ';
var pat1 = new RegExp('^\\<12\\> ([rnbqkpRNBQKP-]{8}) ([rnbqkpRNBQKP-]{8})');
var pat2 = new RegExp('^\\<12\\> ([rnbqkp RNBQKP-]{8}){2}');
var pat3 = new RegExp('^\\<12\\> ([rnbqkp RNBQKP-]{8}){2}?');
document.write(str.match(pat1));
document.write('<br />');
document.write(str.match(pat2));
document.write('<br />');
document.write(str.match(pat3));
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
哪个产生
<12> rnbqkb-r Rnbq-b-r,rnbqkb-r,Rnbq-b-r
<12> rnbqkb-r Rnbq-b-, Rnbq-b-
<12> rnbqkb-r Rnbq-b-, Rnbq-b-
Run Code Online (Sandbox Code Playgroud)
作为输出.
为什么既没有模式pat2也没有pat3捕获第一组rnbqkb-r?我想捕获所有组,而不必像模式中那样明确地重复它们pat1.