2

我有一个变量,其中包含“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

所以我需要告诉他我想要最后一次出现“:”和“.input”之间的所有内容,因为现在他找到了第一个“:”并停在那里。

有什么想法我可以实现这一点吗?

谢谢!

4

4 回答 4

2

剩下的一种选择(可能还有许多其他选择)是:

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

JS 小提琴演示

参考:

于 2013-08-09T13:26:49.273 回答
1

您可以尝试不使用正则表达式:

var test = "j_id0:j_id11:i:f:pb:d:MyFieldName.input";
var fieldName = test.split(':').pop().split('.')[0];
于 2013-08-09T13:08:03.697 回答
1

此正则表达式将起作用:

.*:(.*)\.input
于 2013-08-09T13:08:24.277 回答
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/
于 2013-08-09T13:07:02.800 回答