回答
str.match(/substr/g).length
回報「海峽」,「SUBSTR」的出現次數。例如:
str = "22.5 98 12 22 322"
num = str.match(/22/g).length
alert(num) // 3
如果你想匹配整數而不僅僅是子,確保該號碼由一個空格前面和後面:
str = "22.5 98 12 22 322"
num = str.match(/(^|\s)22($|\s)/g).length
alert(num) // 1
另一種選擇,沒有正則表達式:
str = "22.5 98 12 22 322"
num = str.split(" ").filter(function(item) {
return Number(item) === 22;
}).length;
謝謝。你的第二個解決方案是我想要的。 – HosseiN 2012-04-27 15:29:21
嘗試使用這樣的:
if (numbers.indexOf("22") != -1) {
//The number 22 is in the String
}
這並不完全是一個正則表達式,但是當你不需要它爲什麼要使用它?
我想知道重複 – HosseiN 2012-04-27 15:06:06
var str = "22.5 98 12 22 322";
var pattern = /22/g;
if (pattern.test(str)) {
// it matches "22", do your logic here...
}
這裏是一個很好的工具,爲您探索正則表達式:) http://www.regular-expressions.info/javascriptexample.html
從網站上通過了上述:
function demoShowMatchClick() {
var re = new RegExp("(?:^|)+(22(?:$|))+");
var m = re.exec("22.5 98 12 22 322");
if (m == null) {
alert("No match");
} else {
var s = "Match at position " + m.index + ":\n";
for (i = 0; i < m.length; i++) {
s = s + m[i] + "\n";
}
alert(s);
}
}
這將給你所有的比賽,並要求在開始或結束時分離數字ng或空格。
如果你的意思是你應該只找到相同的字符串中重複的數字,你可以使用這樣的事情:
var test_str = '22 34 55 45345 34 22 555';
var matches = test_str.match(/(\b[0-9]+\b)(?=.+\b\1\b)/g);
// matches contains ["22", "34"], but not "55"
Corrolating整數/從文本到正則表達式浮點數是
很棘手,因爲正則表達式沒有這樣的概念。
通過動態輸入,所有工作都以編程方式構建正則表達式。
本示例不包含科學記數法,但它可以。
僞代碼:
If the input matches this parse regex
/^ (?=.*\d) // must be a digit in the input
([+-]?) // capt (1), optional +/-
[0]* // suck up all leading 0's
(\d*) // capt (2), optional digits, will start with [1-9]
([.]?) // capt (3), optional period
(\d*?) // capt (4), non-greedy optional digits, will start with [1-9]
[0]* // suck up all trailing 0's
$/x
sign = '[+]?';
If !length $2 AND !length $4
sign = '[+-]';
Else
If $1 == '-'
sign = '[-]';
Endif
Endif
whole = '[0]*';
If length $2
whole = '[0]*' + $2;
Endif
decfrac = '[.]? [0]*';
If length $4
$decfrac = '[.] ' + $4 + '[0]*';
Endif
regex = '/(?:^|\s)(?=\S*\d) ' + "$sign $whole $decfrac" + ' (?:\s|$)/x';
Else
// input is not valid
Endif
這是一個Perl測試用例。
生成的動態正則表達式還沒有經過測試,
我認爲它有效,但我可能是錯的。
@samps = (
'00000.0',
'+.0',
'-.0',
'0.',
'-0.00100',
'1',
'+.1',
'+43.0910',
'22',
'33.e19',
);
for (@samps)
{
print "\nInput: $_\n";
if(/^ (?=.*\d) ([+-]?) [0]*(\d*) ([.]?) (\d*?)[0]*$/x) # 1,2,3,4
{
my ($sign, $whole, $decfrac);
$sign = '[+]?';
if (!length $2 && !length $4) {
$sign = '[+-]';
} elsif ($1 eq '-') {
$sign = '[-]';
}
$whole = '[0]*';
if (length $2) {
$whole = '[0]*'.$2;
}
$decfrac = '[.]? [0]*';
if (length $4) {
$decfrac = '[.] '.$4.'[0]*';
}
my $regex = '/(?:^|\s)(?=\S*\d) '. "$sign $whole $decfrac" . ' (?:\s|$)/x';
print "Regex: $regex\n";
}
else {
print "**input '$_' is not valid\n";
next;
}
}
輸出
Input: 00000.0
Regex: /(?:^|\s)(?=\S*\d) [+-] [0]* [.]? [0]* (?:\s|$)/x
Input: +.0
Regex: /(?:^|\s)(?=\S*\d) [+-] [0]* [.]? [0]* (?:\s|$)/x
Input: -.0
Regex: /(?:^|\s)(?=\S*\d) [+-] [0]* [.]? [0]* (?:\s|$)/x
Input: 0.
Regex: /(?:^|\s)(?=\S*\d) [+-] [0]* [.]? [0]* (?:\s|$)/x
Input: -0.00100
Regex: /(?:^|\s)(?=\S*\d) [-] [0]* [.] 001[0]* (?:\s|$)/x
Input: 1
Regex: /(?:^|\s)(?=\S*\d) [+]? [0]*1 [.]? [0]* (?:\s|$)/x
Input: +.1
Regex: /(?:^|\s)(?=\S*\d) [+]? [0]* [.] 1[0]* (?:\s|$)/x
Input: +43.0910
Regex: /(?:^|\s)(?=\S*\d) [+]? [0]*43 [.] 091[0]* (?:\s|$)/x
Input: 22
Regex: /(?:^|\s)(?=\S*\d) [+]? [0]*22 [.]? [0]* (?:\s|$)/x
Input: 33.e19
**input '33.e19' is not valid
- 1. 匹配已知主機在正則表達式
- 2. 奇怪的正則表達式(正則表達式)匹配!不匹配數字
- 3. 正則表達式匹配
- 4. 正則表達式匹配
- 5. 正則表達式匹配%
- 6. 正則表達式匹配
- 7. 正則表達式匹配
- 8. 正則表達式 - 匹配
- 9. 正則表達式匹配
- 10. 匹配正則表達式
- 11. 正則表達式 - 匹配
- 12. 正則表達式匹配
- 13. 正則表達式匹配
- 14. 正則表達式匹配
- 15. 正則表達式匹配
- 16. 匹配正則表達式{
- 17. 正則表達式匹配
- 18. 正則表達式匹配「|」
- 19. 正則表達式匹配
- 20. 正則表達式匹配
- 21. 正則表達式匹配
- 22. 正則表達式:匹配
- 23. 正則表達式匹配@「*」
- 24. 匹配正則表達式
- 25. 正則表達式:匹配
- 26. 匹配正則表達式
- 27. 正則表達式匹配
- 28. 正則表達式匹配
- 29. 正則表達式匹配
- 30. 正則表達式匹配
在基於正則表達式,答案要知道,'.'字符具有特殊的含義。如果你傳入一個數字,比如'22.53',你需要跳過這個句點:'/ 22 \ .53 /' – 2012-04-27 14:56:14
'22'如何與'+ 22.00'或'0'匹配'-.0' '和'+ 0'或'-.02'對'-0.0200'? – sln 2012-04-27 18:31:01
@sln:匹配之前,數字已經轉換爲正確的( - 。0轉換爲0和+22.00轉換爲22)與parseFloat – HosseiN 2012-04-29 09:50:37