簡體   English   中英

文本輸入中用於自定義語法的正則表達式

[英]Regular expression for custom syntax in text input

我應該在文本輸入中強制使用某種搜索語法,並且在觀看了多個RegEx視頻和教程之后,為實現我的目的創建正則表達式仍然很困難。 表達式結構應類似於: $earch://site.com?y=7, app=app1, wu>7, cnt<>8, url=http://kuku.com?adasd=343 , p=8

可以用自由文本搜索可能含有比分隔符,這是其他任何字符開始, (必須先輸入自由文本,並且字符串只能是自由文本搜索)。

字段名稱的自由文本逗號分隔部分之后,該部分僅由[az][AZ] ,后跟運算符: (=|<|>|<>) ,然后是字段搜索值,該值可能不是,

分隔各部分的逗號之間可能有空格(\\s*)

必須顯示自由文本部分或至少一個field = value才能使字符串有效。

有人知道這個問題嗎? :)

^[^,]*(?:,\\s*[a-zA-Z]+(?:[=><]|<>)[^,]+)*$ –生皮

謝謝,這似乎有效。 為什么要使用非捕獲組?

他之所以這樣做,很可能是因為他沒有假設要捕獲這些組(您未指定)。

另外-如果我以逗號開頭的字符串是有效的,而我希望它是無效的(如果開頭沒有自由文本)。

可以通過將第一個*更改為+來實現,即^[^,]+…

我正在使用javascript。 我希望能夠將每個鍵=值對(包括可能的自由文本作為一個組)分開,並且在該組中,我希望能夠將鍵,運算符和值捕獲為單獨的實體(或組)

僅使用一個RegExp調用是無法實現的,請參見例如, 如何在JavaScript Regexp中捕獲任意數量的組? 這是一個示例解決方案:

 s = '$earch://site.com?y=7, app=app1, wu>7, cnt<>8, url=http://kuku.com?adasd=343 , p=8' part = /,\\s*([a-zA-Z]+)(<>|[=><])([^,]+)/ re = RegExp('^([^,]+)('+part.source+')*$') freetext = re.exec(s)[1] // validate s and take free text as 1st capture group of re if (freetext) { document.write('free text:', freetext, '<p>') parts = RegExp(part.source, 'g') m = s.slice(freetext.length).match(parts) // now get all key=value pairs into m[] if (m) { field = [] for (i = 0; i < m.length; ++i) { f = m[i].match(part) // and now capture key, operator and value from m[i] field[i] = { key:f[1], operator:f[2], value:f[3] } for (property in field[i]) // display them document.write(property, ':', field[i][property], '; ') document.write('<p>') } document.write(field.length, ' key/value pairs total<p>') } } 

暫無
暫無

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

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