这是我想在文本文件中识别的字符串。文本文件具有我需要在每行中提取的特定字段。例如:
Field1 = This is the content for field 1
Field2 = This is the content for field 2
Field3 = This is the content for field 3, which is = to 4445
假设我想在第一个“=”符号后提取field3的内容。如何获取该内容“这是字段3的内容,即= 4445”,包括第二个“=”符号,但不是第一个。 我正在进入正则表达式,所以我没有多少经验。这是我试过的:
=.*
但这将打印出第一个“=”符号及其后的所有内容。我想省略第一个=符号。
同样,在没有第一个“=”符号的情况下获得“Field3”的正则表达式是什么?我知道我可以根据第一个等号分割线,但我真的需要用regexp来做。谢谢
答案 0 :(得分:5)
.*?=\s*(.*)
.
表示除换行符之外的所有字符+
意味着另外一个角色()
表示捕获组*
表示零或更多\s
表示空格*?
零或多个(懒惰)将其从捕获组中提取出来。它应该在你的第一个捕获组中。请记住,整个数组存储在匹配的0
索引中。
var match = myRegexp.exec(input);
alert(match[1]);
请详细了解regex here并使用debugexx.com进行试验。
答案 1 :(得分:1)
您必须使用捕获组。有点像这样的东西:
str.match(/=\s*(.*)$/)[1];
或者你这样做:
res = str.match(/=\s*(.*)$/);
console.log(res[1]);
如果你想要一个'更安全'的正则表达式,你可以试试这个:
str.match(/^[^=]+=\s*(.*)$/);
^
匹配行的开头;
[^=]+
匹配除等号以外的任何字符;
=
将匹配第一个等号;
(.*)$
将捕获第一个等号后的所有内容,直到字符串结束。
答案 2 :(得分:0)
要匹配Field3
,您可以使用超前断言:
str.match(/Field3(?=\s*=)/);
如果后跟等号,则匹配Field3
,但不会在匹配字符串中包含等号。