我正在尝试使用正则表达式获取JavaScript中字符串的前两个单词。
我在用:
var str = "Reed Hastings, CEO Netflix";
var res = str.match(/^\s*(\w+ \w+)/);
哪个回头-
Reed Hastings,Reed Hastings
这是可行的,但是谁能告诉我为什么会重复吗?
最佳答案
...为什么要重复?match
返回一个数组,其中第一个条目是整个表达式的整体匹配项,其次是您在正则表达式中定义的每个捕获组的内容的条目。由于已定义捕获组,因此阵列具有两个条目。如果开头的任何内容与\s*
匹配,则第一个条目将具有前导空格;第二个则不会,因为它只包含组中的内容。
这是一个简单的例子:
var rex = /This is a test of (.*)$/;
var str = "This is a test of something really cool";
var match = str.match(rex);
match.forEach(function(entry, index) {
snippet.log(index + ": '" + entry + "'");
});
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
有时第二个单词后面会有一个逗号,而其他时候只有一个空格
您的表情与之不符,只允许有一个空格(并且只允许其中一个)。如果您还希望允许使用逗号,并且可能允许任意数量的空格,那么:
/^\s*(\w+[,\s]+\w+)/
或者,如果您只想允许一个逗号,则可能在两边都留有空格
/^\s*(\w+\s*,?\s*+\w+)/
您可能还会考虑两个捕获组(每个单词一个):
/^\s*(\w+)\s*,?\s*+(\w+)/
例:
var str = "Reed Hastings, CEO Netflix";
var res = str.match(/^\s*(\w+)\s*,?\s*(\w+)/);
if (res) {
snippet.log("Word 1: '" + res[1] + "'");
snippet.log("Word 2: '" + res[2] + "'");
} else {
snippet.log("String didn't match");
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
关于javascript - 使用正则表达式提取Javascript中字符串的前两个单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29890295/