替换除匹配字符串之外的所有内容 - JS Regex

时间:2014-09-26 15:12:13

标签: javascript regex

另一个'否定匹配' /'匹配除了'之外的所有内容。 Java Script中的问题。

所以这就是我想要做的事情:

我有一个巨大的文本文件,我想从文件中删除除用户名/密码行之外的所有内容。以下是文本中的示例部分:

<property name="password">QWERTY</property>
....lots of similar tags......
<property name="username">Hello</property>
<property name="passive">1</property>
<property name="password">Test Password</property>
<property name="scheme">smb</property>
<property name="timeout">10000</property>
<property name="username">RANDOM USER</property>
....lots of similar tags......
<property name="username">Sid</property>

我想删除不是密码或用户名的每一行。

我尝试了以下替换功能,至少从密码开始,但它似乎没有工作:

incomingString = incomingString.replace(/[\W\w]*?(?=<property name="password">[\W\w]*?</property).*?/g,"");

回顾过去,我可以理解正则表达式存在太多问题所以我希望知道一个正在运行的正则表达式,它可以帮助我删除前面提到的文本中的所有行并留下我

<property name="password">QWERTY</property>
<property name="username">Hello</property>
<property name="password">Test Password</property>
<property name="username">RANDOM USER</property>
<property name="username">Sid</property>

PS:重要的是他们在文件中的订单应该保持

关于JavaScript正则表达式中的这个无休止的问题(这和lookbehinds),我经历了几个关于SO的问题,但答案对于那个特定情况非常具体。

任何帮助都将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:3)

您可以将此正则表达式用于String#match调用:

/<property[^>]*name="(username|password)[^>]*>[^<]*</property>/gi

RegEx Demo

答案 1 :(得分:1)

虽然我仍然认为你最好在这里使用XML解析器,但这应解决一线问题:

<property[^>]*name="(username|password)".*?</property>

http://regex101.com/r/oM7aD2/1

您将文字<property跟随任意数量的非文字>的字符匹配(如果该行的第一个标记不是username,则会阻止您进行匹配或password)然后其余部分与@ anubhava相同(尽管我冒昧地添加第二个文字",以防您遇到其他以username或{{为前缀的属性1}} - 例如password