簡體   English   中英

比賽后的正則表達式

[英]Regular Expression Following Match

所以,我有這個正則表達式,當前正則表達式匹配字符串中的最后一個空格及其后面的單詞:

var regex = /\s+\S*$/m 

例如:

'this match'.match(regex) == [" match"]

但是,如果整個字符串只是一個空格字符,然后是單詞字符,它將仍然匹配。 (例如' match'

我已經嘗試過“不跟隨”量詞 ,但是最接近的是我的首選輸出的倒數:

var regex = /\S+(?=\s+\S*$)/m
'this match'.match(regex) == ["this"]

我希望這只匹配一個空格,然后是一個單詞(如果該匹配后跟任意數量的單詞字符)

因此,我希望它與最后一個空格和單詞匹配: 'multiple words '

但根本不匹配: ' word'

編輯:我應該補充一點,我打算使用search()方法(或類似方法)來在比賽開始時獲取字符的索引。 我僅將上面的match()方法用於說明目的。

您可以使用如下形式:

/.(\s\w+)/

這將匹配在組1中捕獲的任何字符,后跟空白字符,然后是一個或多個單詞字符。然后,您只需提取該組即可。 例如:

'multiple words'.match(/.(\s\w+)/)[1] // " words"
' word'.match(/.(\s\w+)/)             // null

請注意,我用過. 在此模式中,因為問題有點不清楚你想要什么匹配,理由只是“ 只是一個空格字符,然后單詞字符 ”。 如果您想確保在捕獲的組之前有一些文字字符,請使用以下命令:

/\w\s*(\s\w+)/

要使用第一個模式獲取第一個匹配項的索引非常簡單。 只需使用search並添加1:

'multiple words'.search(/.(\s\w+)/) + 1 // 8
' word'.match(/.(\s\w+)/) + 1           // 0 (not found)

但是,如果您使用第二種模式,則要困難得多。 JavaScript沒有提供一種簡單的方法來獲取每個捕獲組的位置。 最好的辦法是使用exec ,它將為您提供捕獲組找到匹配項的索引,然后執行以下操作:

match = /\w\s*(\s\w+)/.exec('multiple words');
index = match.index + match[0].length - match[1].length; // 8

match = /\w\s*(\s\w+)/.exec(' words');                   // undefined

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM