Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找字符串的单个匹配项,然后查找另一个模式的多个匹配项_Javascript_Regex - Fatal编程技术网

Javascript 查找字符串的单个匹配项,然后查找另一个模式的多个匹配项

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' ); }); 我的基本理

是否可以将某个字符串匹配一次,然后将字符串模式的多次出现多次,将每次都替换为字符串本身,并附加另一个值(例如换行符)

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' ); 
});
我的基本理念是“当你可以轻松地用两个来完成你的目标时,为什么要努力制作一个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);