2017-02-22 91 views
0

我試圖縮小RegEx以忽略帶有type="submit"的表單元素。我只想選擇元素的部分,直至部分class="*",但如果type =「submit」在課程之前或之後出現,仍然會忽略。正則表達式排除包含字符串模式的匹配

我的正則表達式迄今:

(<(?:input|select|textarea){1}.*[^type="submit"]class=")(((?!form\-control)[a-zA-Z0-9_ -])*") 

測試用例: 線應該匹配類的結束,2號線忽略。

<input type="text" name="name" id="test" class="example-class" max-length="7" required="required"> 
<input type="submit" class="btn-primary" value="send"> 

這是不可能的嗎?

+0

你使用這個正則表達式的語言是什麼? – gms0ulman

+0

我正在使用原子文本編輯器搜索和替換工具來執行批量html更改。它不是腳本的一部分。我正在使用http://regexr.com/構建正則表達式 – Kiee

+0

爲什麼有那麼多人使用'... {1}'你認爲這會改變什麼? – Fallenhero

回答

0

感謝您的意見。答案是前瞻性的展望。

(?!.*type="submit.*)添加到正則表達式的開頭似乎給了我期望的結果。

工作正則表達式:

(?!.*type="submit.*)(<(?:input|select|textarea).*class=")(((?!form\-control)[a-zA-Z0-9_ -])*") 
+0

我們仍然認爲使用有效HTML解析器的程序會更有意義 –

+0

我不確定爲什麼HTML解析器不斷引用。我想執行項目範圍搜索並使用正則表達式模式替換多個HTML文件。 HTML解析器是否仍然適用於這種情況? – Kiee

+0

絕對。您可以用任何語言編寫一個小腳本來搜索文件夾中的許多文件。這取決於你的需求。 –

0
(<(?:input|select|textarea)\s((?!type="submit")[\w\-]+\b="[^"]*"\s?)*>) 

該表達式被綁定到單個標籤。
最好避免像.*這樣的表達式,因爲它可以進一步匹配一個字符串,該字符串將在一個標籤內開始,並在另一個標籤內結束。