我有一个变量,其中包含" 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
所以我需要告诉他我想要最后一次出现":"和"。输入",因为现在他找到第一个':'并停在那里。
我是如何实现这一点的?
谢谢!
答案 0 :(得分:2)
剩下的一个选项(可能是许多其他选项)是:
var str = "j_id0:j_id11:i:f:pb:d:MyFieldName.input",
fieldName = str.substring(str.lastIndexOf(':') + 1, str.lastIndexOf('.'));
参考文献:
答案 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/
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/