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

capture string between characters with jquery

本文关键字:之间 字符串 字符 jquery 使用      更新时间:2023-09-26

我有一个变量,它包含"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

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

你知道我该怎么实现吗?

谢谢!

剩下的一个选项(大概还有很多其他选项)是:

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

JS Fiddle演示。

参考文献:

  • CCD_ 1
  • CCD_ 2

此正则表达式将起作用:

.*:(.*)'.input

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

var test = "j_id0:j_id11:i:f:pb:d:MyFieldName.input";
var fieldName = test.split(':').pop().split('.')[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/