Regular expression [Any number]
I need to test for "[any number]" in a string in javascript. how would i match it?
Oh, "[" and "]" also need to be matched.
so string like "[1]" or "[12345]" is a match.
Non match: "[23432" or "1]"
So for example:
$('.form .section .parent').find('input.text').each(function(index){
$(this).a开发者_StackOverflowttr("name", $(this).attr("name").replace("[current]", "['"+index+"']"));
});
I need to replace input fields name: "items[0].firstname" to "items[1].firstname" thanks
UPDATE: for your updated question
variable.match(/\[[0-9]+\]/);
Try this:
variable.match(/[0-9]+/); // for unsigned integers
variable.match(/[-0-9]+/); // for signed integers
variable.match(/[-.0-9]+/); // for signed float numbers
if("123".search(/^\d+$/) >= 0){
// its a number
}
I always use the following regular expression to detect any kind of number in a string. Had no issues so far.
'(([\+\-]*\d*\.*\d+[eE])?([\+\-]*\d*\.*\d+))'
In detail:
'([\+\-]*\d*\.*\d+)'
to match a (non-)decimal number with(out) leading digits or sign
'([\+\-]*\d*\.*\d+[eE])?'
to match an exponential base before the number.
If there are brackets around required, you can add them inside or outside of the surrounding paranthesis:
'(\[([\+\-]*\d*\.*\d+[eE])?([\+\-]*\d*\.*\d+)\])'
In fact the surrounding paranthesis are not necessary, but i keep them to easier concatenate the expression with others.
var mask = /^\d+$/;
if ( myString.exec(mask) ){
/* That's a number */
}
You can use the following function to find the biggest [number]
in any string.
It returns the value of the biggest [number]
as an Integer.
var biggestNumber = function(str) {
var pattern = /\[([0-9]+)\]/g, match, biggest = 0;
while ((match = pattern.exec(str)) !== null) {
if (match.index === pattern.lastIndex) {
pattern.lastIndex++;
}
match[1] = parseInt(match[1]);
if(biggest < match[1]) {
biggest = match[1];
}
}
return biggest;
}
DEMO
The following demo calculates the biggest number in your textarea every time you click the button.
It allows you to play around with the textarea and re-test the function with a different text.
var biggestNumber = function(str) {
var pattern = /\[([0-9]+)\]/g, match, biggest = 0;
while ((match = pattern.exec(str)) !== null) {
if (match.index === pattern.lastIndex) {
pattern.lastIndex++;
}
match[1] = parseInt(match[1]);
if(biggest < match[1]) {
biggest = match[1];
}
}
return biggest;
}
document.getElementById("myButton").addEventListener("click", function() {
alert(biggestNumber(document.getElementById("myTextArea").value));
});
<div>
<textarea rows="6" cols="50" id="myTextArea">
this is a test [1] also this [2] is a test
and again [18] this is a test.
items[14].items[29].firstname too is a test!
items[4].firstname too is a test!
</textarea>
</div>
<div>
<button id="myButton">Try me</button>
</div>
See also this Fiddle!
精彩评论