[英]Regex that gets me string, given beginning and end
我想用3個參數構建一個函數:
var function = searchMyRegex(begin_marker, end_marker, text) { ... }
我需要一個RegExp,它可以給我一定的字符串(給定開始和結束),但是它是我的最短版本,這意味着開始和結束都不會在2個標記之間
例如
var text = "Lorem ipsum ipsum sit amet amet adipisicing elit"
如果BEGIN是ipsum
而END是amet
,我想返回ipsum sit amet
,而不是ipsum ipsum sit amet amet
我嘗試解決自己的方式是這樣的:
new RegExp(begin_marker + "[^" + end_marker + "]*\ " + end_marker);
但這似乎不起作用,我不確定為什么。
您可以使用這種構造:
ipsum(?:(?!ipsum).)*?amet
(?:(?!ipsum).)*?
檢查ipsum
之后和amet
之前的每個位置是否不是另一個ipsum
的開始。
使用非貪婪量詞*?
,比賽會在第一次出現amet
停止。
請注意,先前的技術需要針對每個位置提前進行測試。 如果處理長字符串,則還可以使用字符類來提高效率:
ipsum[^ia]*(?:i(?!psum)[^ia]*|a(?!met)[^ia]*)*amet
但是,動態構建此模式不太容易。
當標記是單詞(即以單詞字符開頭和結尾)時,您可以像這樣限制前瞻測試的位置數量:
\bipsum\W+(?:(?!ipsum\b)\w+\W+)*?amet\b
前瞻僅在單詞的開頭進行測試。 這個可以很容易地動態構建。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.