假设我有一个像 'a b xy c pq'
这样的字符串,并且我需要编写一个正则表达式,以便 match()
方法返回一个数组,如下所示: ['a','b','xy','c','pq']
。
让我们看一些例子:
>>> 'x y z '.match(/\w{1,3}\s+/g)
['x ', 'y ', 'z ']
>>> 'x y z '.match(/(\w{1,3})\s+/g)
['x ', 'y ', 'z ']
如您所见,即使我添加括号,它也会返回相同的结果。我希望结果没有空格。另外,如果不必在源字符串中添加结尾空格,那就太好了。
你认为我可以在哪里改进这个正则表达式以获得我想要的东西?
请注意,我不想使用 exec()
,因为它必须运行多次才能获取所有匹配项。
另请注意,这个问题可以通过 split()
轻松解决
>>> 'x y z'.split(/\s/)
['x', 'y', 'z']
>>> "a b xy c pq".split(/\s/)
['a','b','xy','c','pq']
但是,我还需要验证该字符串。每个匹配项最多只能包含三个字符,并且每个匹配项应该是不带特殊字符的字母数字单词。因此我不能使用 split(),因为在这种情况下我必须单独验证每个匹配。我想通过一个正则表达式来完成这一切。
我想在单个正则表达式中进行验证和拆分的原因是因为我需要在一个事件中执行很多这些操作,因此我需要使其尽可能快。
最佳答案
通过附加 \s+
,该模式匹配空格字符。
删除\s+
:
'x y z '.match(/\w{1,3}/g)
// => ["x", "y", "z"]
使用\b
,您可以在单词边界进行匹配。
'x y z '.match(/\b\w{1,3}\b/g)
// => ["x", "y", "z"]
'x yyyyyyyyyy z '.match(/\b\w{1,3}\b/g)
// => ["x", "z"]
关于javascript - 需要 Javascript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19298260/