簡體   English   中英

正則表達式讓我字符串,給定開始和結束

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

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