Javascript 查找字符串的单个匹配项,然后查找另一个模式的多个匹配项
是否可以将某个字符串匹配一次,然后将字符串模式的多次出现多次,将每次都替换为字符串本身,并附加另一个值(例如换行符) html:Javascript 查找字符串的单个匹配项,然后查找另一个模式的多个匹配项,javascript,regex,Javascript,Regex,是否可以将某个字符串匹配一次,然后将字符串模式的多次出现多次,将每次都替换为字符串本身,并附加另一个值(例如换行符) html: 一些字符串开始 e-f e-f E F 成功匹配字符串,但我似乎无法重复替换单词对 您必须使用函数替换来执行您想要的操作: s.replace( /^(.*?)%(.*)/, function(s,a,b) { return a + '\n' + b.replace( /(\w+)-(\w+),?/g, '$1\n$2\n' ); }); 我的基本理
一些字符串开始
e-f
e-f
E
F
成功匹配字符串,但我似乎无法重复替换单词对
您必须使用函数替换来执行您想要的操作:
s.replace( /^(.*?)%(.*)/, function(s,a,b) {
return a + '\n' + b.replace( /(\w+)-(\w+),?/g, '$1\n$2\n' );
});
我的基本理念是“当你可以轻松地用两个来完成你的目标时,为什么要努力制作一个uber regex?”在这种情况下,我们匹配更大的字符串(“a-b,c-d,e-f”),然后匹配各个对并进行替换
如果不知道问题的大背景,很难说,但似乎你可以通过拆分和重新合并,以一种不那么复杂的方式实现你的目标:
var parts = s.split( '%' );
var result = [ parts[0] ].concat( parts[1].split( /[,-]/ ) ).join( '\n' );
如果字符串总是用逗号/百分比表示,则可以执行以下操作:
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'
)
s.replace( /^(.*?)%(.*)/, function(s,a,b) {
return a + '\n' + b.replace( /(\w+)-(\w+),?/g, '$1\n$2\n' );
});
var parts = s.split( '%' );
var result = [ parts[0] ].concat( parts[1].split( /[,-]/ ) ).join( '\n' );
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);