Regex with dynamic length
我有 2 或 3 个单词的字符串:
1 2 | 'apple grape lemon' 'apple grape' |
我需要从所有单词中获取第一个字符。
我的正则表达式:
1 | /^(\\w).*?\\ (\\w).*?\\ ?(\\w?).*?$/ |
对于所有字符串,此正则表达式仅获取 2 个单词的第一个字符。
如何解决?
你不能用一个正则表达式来做到这一点(除非你使用.NET)。但是您可以使用匹配单词的第一个字符的正则表达式,然后获取所有匹配项,并将它们连接在一起:
1 2 3 4 | var firstLetters = ''; var match = str.match(/\\b\\w/g) if (match) firstLetters = match.join(''); |
当然,如果你只是想自己获取字母,则不需要
你不应该,
如果你使用 javascript,你不需要为了一个简单的问题而使用正则表达式。
要获取第一个字母,只需这样做:
1 2 3 4 5 6 | var aString = 'apple bee plant'; var anArray = aString.split(' '); for(var aWord in anArray) { var firstLetter = aWord.charAt(0); } |
在正则表达式中,"words" 不仅仅意味着字母。在 JavaScript 中
最简单的方法是:
1 | firstLetters = (m = str.match(/\\b\\w/g))? m.join('') : ''; |
正则表达式是一种正则语言,因此你不能在其中出现这种重复。您想要的是将字符串切割成单独的标记(可以通过正则表达式来匹配分隔符),然后在每个标记上应用正则表达式。要从每个单词中获取第一个字符,使用子字符串操作而不是正则表达式会更快。
你的正则表达式的问题是第二个单词后面的