簡體   English   中英

查找單個出現的字符串,然后查找另一個模式的多個匹配項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM