[英]Regular expression: word between spaces
对愚蠢的问题感到抱歉,但是有一个示例: http : //jsfiddle.net/rb98M/
var q = 'SELECT CASE WHEN STATE IN ';
q = q.replace(/(^|\s)\w*(\s|$)/g, function(match) { return match.toLowerCase(); });
alert(q);
我有一个字符串,我想使每个单词都使用lowerCase,它在空格之间(并且可以在行的开头和结尾)。
但是,我的结果是:
select CASE when STATE in
那是我的问题。 为什么会这样呢?
编辑我希望传递SELECT * FROM [Users] u
并获得select * from [Users] u
等(包括每个SQL语句,并排除[]
任何表名和属性)
由于您没有用其他标点符号来分隔单词。 因此,我相信仅使用\\S
就足够了。
q = q.replace(/(\S+)/g, function(match)
在您的情况下,它不起作用,因为\\ s \\ w * \\ s正在吃掉输入中的SELECT
(结尾处有空格),而CASE
之前没有足够的空间( \\s
)。
这是使用正则表达式匹配输入的方式:
SELECT CASE WHEN state IN
^ m1 ^ ^ m2 ^ ^m3^
它只是忽略了CASE
广告和来自正则表达式的state
字。 因为CASE
之前的空间是由SELECT
。 你必须强制空间( \\s
在字的两边)(即\\s\\w*\\s
)。 换句话说,您的正则表达式有重叠。
q = q.replace(/(?:\s|^)(\w+)(?=\s|$)/g, function(match)
您可以使用此代码并将要跳过的所有部分放入捕获组:
var q = 'SELECT * FROM [Users] u aNd GeT sElEct * from [Users] U';
q = q.replace(/(\[[^\]]+\])|\w+/g, function(m, g1) {
return (g1) ? m : m.toLowerCase(); });
仅当定义了捕获组时,才会将toLowerCase()
方法应用于整个匹配项。
我使用\\w
缩短了模式,但由于它无法代替数字,小写字母和下划线,因此可以将其替换为[AZ]
图案细节:
\[ # a literal [
[^\]]+ # character class with all characters except ] (repeated one or more times)
\] # a literal ]
请注意,您无需转义右方括号(或仅适用于非常旧版本的Internet Explorer):),可以这样写: \\[[^]]+]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.