[英]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' );
});
我的一般哲學是“為什么當您可以輕松完成兩個目標時創建一個超級正則表達式呢?” 在這種情況下,我們匹配較大的字符串(“ ab,cd,ef”),然后匹配各個對並進行替換。
不知道問題的大背景,這很難說,但是看來您可以通過拆分和重新加入來以不太復雜的方式實現目標:
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'
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.