查找字符串的单个匹配项,然后查找另一个模式的多个匹配项
find a single occurrence of a string, then multiple matches of another pattern
是否可以匹配某个字符串一次,然后多次出现字符串模式,将每个字符串模式替换为自身,并附加另一个值(例如,换行符(?
<!--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>
成功匹配字符串,但我似乎无法重复替换单词对。
捷轩
您必须使用函数替换来执行所需的操作:
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' );
如果你的字符串总是用逗号/百分比描绘,你可以这样做:
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'
。
相关文章:
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 模仿负查找以匹配JavaScript正则表达式中没有紧跟特定字符的模式
- 使用正则表达式查找字符模式
- Jquery在html和纯文本中查找模式
- 查找具有与模式匹配的属性的元素
- 查找模式并仅删除几个字符
- 在数组 jQuery 中查找特定的字符串模式
- Jquery:在一个字符串中查找所有实例模式,提示用户替换模式的所有实例,然后进行替换
- 从文本 jquery 中查找和挑选出模式
- 形成在重复小数点内查找模式的正则表达式
- 查找与模式匹配的所有子字符串
- 查找模式 遍历多个数组的 FOR 循环
- 查找字符串的单个匹配项,然后查找另一个模式的多个匹配项
- JavaScript 正则表达式查找与开始和结束模式匹配的所有子字符串
- Javascript通过正则表达式在字符串中查找模式
- JavaScript 正则表达式,用于在“注释”代码中查找模式
- 正则表达式查找模式,返回子模式
- 使用正则表达式查找模式并获得结果
- 正则表达式查找模式并只替换其中的一部分
- Jquery在字符串中查找模式