是否可以匹配某个字符串一次,然后多次出现一个字符串模式,用自己替换每个字符串,附加另一个值(例如,换行符)?
<!--HTML-->
<textarea id="i"></textarea>
JS
var s = "some-string-to-begin%a-b,c-d,e-f";
var re = /^(.*?)%(((\w+)\-(\w+)),?)*/g;
console.log(s.match(re)); //matches the whole string
var res = s.replace(re, "$1\n$2\n$3\n$4\n$5");
$("#i").val(res)
HTML:
<textarea>
some-string-to-begin
e-f
e-f
e
f
</textarea>
成功匹配字符串,但我似乎无法重复替换单词对。
答案 0 :(得分:0)
您必须使用功能替换来执行您想要的操作:
s.replace( /^(.*?)%(.*)/, function(s,a,b) {
return a + '\n' + b.replace( /(\w+)-(\w+),?/g, '$1\n$2\n' );
});
我的一般理念是“当你可以轻松地用两个人完成你的目标时,为什么要拔掉你的头发试图制造一个超级正则表达式?”在这种情况下,我们匹配更大的字符串(“a-b,c-d,e-f”),然后匹配各个对并进行替换。
在不了解问题的更广泛背景的情况下,很难说,但似乎您可以通过拆分和重新加入来以不太复杂的方式实现目标:
var parts = s.split( '%' );
var result = [ parts[0] ].concat( parts[1].split( /[,-]/ ) ).join( '\n' );
答案 1 :(得分:0)
如果您的字符串始终以逗号/百分比描述,您可以执行以下操作:
var s = "some-string-to-begin%a-b,c-d,e-f",
replacement = s.split(/[%,]/g).join('\n'); // split by % or , and then join by linebreak
$("#i").val(replacement);
(不确定您是否也尝试将'a-b'
分隔为'a\nb'
。)