我试图将所有单词与单个或多个空格匹配。我的表达
(\ w + \ s *)*无效
编辑1: 假设我有一个这种形式的句子
[[do "hi i am bob"]]
[[do "hi i am Bob"]]
now I have to replace this with
cool("hi i am bob") or
cool("hi i am Bob")
我不关心用单个替换多个空格。
我可以用一个单词来实现这个,比如
\[\[do\"(\w+)\"\]\] and replacing regex cool\(\"$1\")
但这看起来不是一个有效的解决方案,并且不匹配多个单词....
我为不完整的问题道歉
任何帮助都将是aprecciated
答案 0 :(得分:3)
找到这个正则表达式:
/\[\[do\s+("[\w\s]+")\s*\]\]/
并进行以下替换:
'cool($1)'
这里唯一特别的事情是使用
来利用字符类[\w\s]+
匹配一个或多个单词或空格字符(a-z,A-Z,0-9,_和空格)。那&#39 ;;;吃掉你内心的东西没问题。
'[[do "hi i am Bob"]]'.replace(/\[\[do\s+("[\w\s]+")\s*\]\]/, 'cool($1)')
吐出
cool("hi i am Bob")
虽然 - 如果你想添加标点符号(你可能会这样),你应该这样做:
/\[\[do\s+("[^"]+")\s*\]\]/
这将匹配任何不是双引号的字符,保留您的子字符串。有更复杂的问题可以让你处理转义的引号,但我认为这不属于这个问题的范围。
答案 1 :(得分:2)
要匹配“所有单个或多个空格的单词”,您不能使用\s*
,因为它甚至不会匹配任何空格。
另一方面,看起来你想要匹配“hi”,这是一个没有空格的单词。
您可能希望匹配由空格分隔的一个或多个单词。如果是这样,请使用正则表达式
(\w+(?:$|\s+))+
或
\w+(\s+\w+)*
答案 2 :(得分:0)
我不确定,但也许这就是你想要的:
"Hi I am bob".match(/\b\w+\b/g); // ["Hi", "I", "am", "bob"]
答案 3 :(得分:0)
你的正则表达式是:
/([a-zA-Z0-9_]{1,}[ \r\v\n\t\f]{0,}){0,}/
也就是说,找到A到Z中的一个或多个的第一个匹配,打扰低位和高位以及数字和下划线,然后是零个或多个空格字符:
然后是零或更多的A到Z打扰下部和上部以及数字和下划线。
\s
不仅仅匹配简单空格,还可以放入文字空间,它可以正常工作。
我相信你想要:
/(\w+ +\w+)/g
A到Z中的一个或多个的所有匹配打扰低位和高位以及数字和下划线,然后是一个或更多空格,然后是一个或更多更多的A到Z打扰了下面和上面以及数字和下划线。
这将匹配由空格分隔的所有单词字符。
如果您只想查找所有单词字符簇,没有标点符号或空格,那么您可以使用:
/(\w+)/g
将找到组合在一起的所有单词字符。
答案 4 :(得分:0)
简单。匹配非空格的所有字符组
var str = "Hi I am Bob";
var matches = str.match(/[^ ]+/g); // => ["Hi", "I", "am", "Bob"]
答案 5 :(得分:0)
var regex=/\w+\s+/g;
现场演示:http://jsfiddle.net/GngWn/
[更新]我刚刚回答了这个问题,但根据评论,这更有可能是你想要的:
var regex=/\b\w+\b/g;
\ b是单词边界。
演示:http://jsfiddle.net/GngWn/2/
[Update2]你的编辑使它成为一个完全不同的问题:
string.replace(/\[\[do "([\s\S]+)"\]\]/,'cool("$1")');
答案 6 :(得分:0)
使用正则表达式模式\w+(\s+\w+)*
,如下所示:
m = s.match(/\w+(\s+\w+)*/g);