使用jquery捕获字符之间的字符串

时间:2013-08-09 13:04:28

标签: javascript regex

我有一个变量,其中包含" j_id0:j_id11:i:f:pb:d:MyFieldName.input" (没有引号)。

现在我想捕捉" MyFieldName"。

我有这个:

var test = "j_id0:j_id11:i:f:pb:d:MyFieldName.input";
var testRE = test.match(":(.*).input");
console.log("old text: " + test);
console.log("new text: " + testRE[1]);

输出:

old text: j_id0:j_id11:i:f:pb:d:MyFieldName.input
new text: j_id11:i:f:pb:d:MyFieldName

所以我需要告诉他我想要最后一次出现":"和"。输入",因为现在他找到第一个':'并停在那里。

我是如何实现这一点的?

谢谢!

4 个答案:

答案 0 :(得分:2)

剩下的一个选项(可能是许多其他选项)是:

var str = "j_id0:j_id11:i:f:pb:d:MyFieldName.input",
    fieldName = str.substring(str.lastIndexOf(':') + 1, str.lastIndexOf('.'));

JS Fiddle demo

参考文献:

答案 1 :(得分:1)

你可以在没有正则表达式的情况下尝试:

var test = "j_id0:j_id11:i:f:pb:d:MyFieldName.input";
var fieldName = test.split(':').pop().split('.')[0];

答案 2 :(得分:1)

这个正则表达式将起作用:

.*:(.*)\.input

答案 3 :(得分:0)

正则表达式的问题在于它与第一个:匹配,然后在(.*)之前捕获所有.input。为避免这种情况,您可以确保:.input之间的捕获不能包含更多:

这个正则表达式适合你:

/:(\w+)\.input/

Fiddle

var test = "j_id0:j_id11:i:f:pb:d:MyFieldName.input";
var testRE = test.match(/:(\w+)\.input/)
console.log("old text: " + test);
console.log("new text: " + testRE[1]); //MyFieldName

第1组将包含您的字段名称。

我认为上面的内容应该对你有用,但是如果你需要超过\w个字符,你可以用它来代替“...:My.Field.Name.input”和捕获“My.Field.Name”:

/:([^:]+)\.input/