2017-02-22 87 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?)*>) 

该表达式被绑定到单个标签。
最好避免像.*这样的表达式,因为它可以进一步匹配一个字符串,该字符串将在一个标签内开始,并在另一个标签内结束。