簡體   English   中英

如何匹配特定的封閉模式以及JS中的REGEX

[英]how to match a specific enclosed pattern and anything in between with REGEX in JS

我想在字符串中匹配這樣的%data%模式。

雖然這很容易,但是我需要一個對大而多行的字符串來說很健壯的解決方案。

例如 :在以下情況下,我只想匹配第一個和第二個匹配的%%組合以及第三和第四個(等等)。

這個%data%不是我想要%顯示在結果中的%data。 %一些示范文字%

我只想搭配零件

%數據%

我要%的數據

%一些示范文字%

從上面的字符串..

我努力了:

我試圖使用此模式,但從第一個%到最后一個%符號中選擇了所有模式。

/^\%[\s\S]*\%$/gm

如果已經問過這個問題,並且您想關閉它。.請向我指出正確的方向,然后關閉它。

這與許多標題所標記的問題不同

正則表達式匹配兩個字符串之間的所有字符

和url: url是正常的正則表達式,而不是JS中的正則表達式(因為JS不支持lookbehind),並且它沒有像我這樣的對匹配問題。因此,我認為它完全不同。


我真的想對RegEX進行一個很好的描述,如果有人可以為它提供答案..因為我不精通閱讀復雜得多的RegEx,只是習慣了它.. 我也想解釋一下為什么我的代碼正在崩潰 ,將來對我沒有幫助。

您可以使用以下正則表達式:

/%(.*?)%/g

這偷懶地捕獲(即,盡可能少地擴展,根據需要擴展)介於2 %之間的所有內容。

這的替代方法:

/%([^%]*)%/g

在這一本書中,我們不是偷懶地匹配,而是匹配(捕獲)除%之后的%

使用此正則表達式的工作輸出:

 const regex = /%(.*?)%/g; const str = `this %data% is not %data that i want to % show up in the results. % some more demo text %`; let m; while ((m = regex.exec(str)) !== null) { // This is necessary to avoid infinite loops with zero-width matches if (m.index === regex.lastIndex) { regex.lastIndex++; } // The result can be accessed through the `m`-variable. m.forEach((match, groupIndex) => { console.log(`Found match, group ${groupIndex}: ${match}`); }); } 

這是您需要的:

正則表達式:

(?<=\%)(.*?)(?=\%)

輸入:

sdgsg%data%dgsgdsg

輸出:

數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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