![](/img/trans.png)
[英]String match one or more numbers with a # - Javascript / regex
[英]Regex match all single underscores surrounded in one or more letters or numbers
我正在嘗試找到所有單個下划線 ,這些下划線被一個字符串中的一個或多個字母或數字包圍。 例如:
ChIJww8705e81qjAgU_IJww8705ZZkW_e81qjAg_ChIJww8
*注意:字符串的長度和下划線的數量是未知的。 該字符串還可以包含多個下划線。 *
我確信這很容易,但我對正則表達式並不陌生。 這是我到目前為止所做的,但它只匹配第一次出現。
[a-zA-Z0-9]+(_)+[a-zA-Z0-9]
最終目標是用另一個角色替換下划線。
在像a_b_c
這樣的情況下,為了避免b
包括第一個下划線(這會阻止匹配第二個下划線)的匹配消耗b
,你可以使用前瞻,它檢查當前位置的匹配但不消耗任何輸入。 (更簡單的是前瞻和后視,但JavaScript不支持lookbehinds。)
/[a-zA-Z0-9]_(?=[a-zA-Z0-9])/g
除此之外,您只獲得一次匹配的唯一原因是您沒有包含/g
(全局)標志。 /g
影響String#match
,使其返回所有匹配而不是第一次匹配的所有捕獲, String#replace
使其替換所有實例而不是僅替換第一個,而RegExp#exec
使其繼續匹配上一個匹配,所以你可以在循環中使用它。
這是用固定字符串替換所有這些下划線, **
:
s.replace(/([a-zA-Z0-9])_(?=[a-zA-Z0-9])/g, '$1**');
如果您確實需要完整的環境來進行替換,您可以將+
量詞保留在第一組中,並將捕獲組放在前瞻中。 (那仍然有效!)
一個例子可能會更清楚 - 這是一個將在150_297_832
字符串中添加每對數字的一個:
var s = '150_297_832';
var result = s.replace(/(\d+)_(?=(\d+))/g, function (match, left, right) {
var sum = parseInt(left, 10) + parseInt(right, 10);
return ' (' + sum + ') ';
});
// result = ' (447) (1129) 832';
// 447 is 150 + 297, 1129 is 297 + 832, 832 was not replaced
試試這個正則表達式:
([a-zA-Z0-9])_([a-zA-Z0-9])
您可以像這樣用它來代替' - '
str.replace(/([a-zA-Z0-9])_([a-zA-Z0-9])/g, "$1-$2")
你可以添加任何其他字符或字符串來代替' - '
此正則表達式匹配(AZ或az或0-9),下划線和(AZ或az或0-9)
說明:
[a-zA-Z0-9]
匹配小字母或大寫字母和數字。
()
:組成一個匹配組, ([a-zA-Z1-9])
組成一組,以便稍后在解決方案中使用它。
和_
顯然匹配下划線。
替換字符串中的$1
和$2
指的是正則表達式中的第一個和第二個匹配組。
你幾乎在那里,考慮你的正則表達式:
[a-zA-Z0-9]+ // a-z, A-Z and 0-9, matched one or more times (greedy)
(_)+ // _ in capture group, matched one or more times (greedy)
[a-zA-Z0-9] // a-z, A-Z and 0-9, matched exactly one time
您不需要匹配下划線前面的多個字符,也不需要匹配多個下划線:
/[a-zA-Z0-9]_[a-zA-Z0-9]/g
// ^ Note the global flag
您也可以使用\\w
等於: [A-Za-z0-9_]
,但請注意它也匹配下划線:
/[\w]_[\w]/g
將所有內容與匹配組和.replace(search, replacement)
綁定在一起:
// Replace all underscores with dashes (-)
var str = 'ChIJww8705e81qjAgU_IJww8705ZZkW_e81qjAg_ChIJww8';
str.replace(/([\w])_([\w])/g, '$1-$2');
// ^ ^
// | Refers to second match group `([\w])`
// Refers to first match group `([\w])`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.