Javascript I';我对正则表达式如何区分撇号和单引号感到困惑
我试图更好地理解正则表达式和撇号/单引号。 如果我使用此代码:Javascript I';我对正则表达式如何区分撇号和单引号感到困惑,javascript,regex,Javascript,Regex,我试图更好地理解正则表达式和撇号/单引号。 如果我使用此代码: const regex = /\b[\'\w]+\b/g console.log(phrase.match(regex)) 然后 我想我知道所有正则表达式都做什么: /text/g表示斜线之间的所有内容,而g表示全局 在第一次命中后继续搜索 \b是单词边界,每边都有空格 w+表示字母数字,而“+”表示它可以用于更多 超过1个字符 [\w\']+表示A-Za-z0-9和任何长度的撇号 但我想得到这个: let phrase=“'
const regex = /\b[\'\w]+\b/g
console.log(phrase.match(regex))
然后
我想我知道所有正则表达式都做什么:
表示斜线之间的所有内容,而g表示全局 在第一次命中后继续搜索/text/g
是单词边界,每边都有空格\b
表示字母数字,而“+”表示它可以用于更多 超过1个字符w+
表示A-Za-z0-9和任何长度的撇号[\w\']+
let phrase=“'pickle'”//变为'pickle'(带单引号)
我错过了什么?我尝试过
const regex2 = /\b[\w+\']\b/g;
console.log(phrase.match(regex2))
let phrase = "can't"
但这就变成了[“”,“t”]
。。。为什么?我现在明白了+
在\w
之后,\
是独立的,但是为什么“t”和“can”去了哪里
我试过了
const regex3 = /\b\'[\w+]\'\b/g;
console.log(phrase.match(regex3))
但我得到“空”。为什么?
在本例中,由于[]
内部的+
,它与一个文本+
字符相匹配,因此您要搜索一个单词边界,后跟一个字母数字字符、+
或”
,后跟一个单词边界
您可能想要:
\b(\w+|\')\b
它查找单词边界,后跟至少一个字母数字字符或单个引号
查看regex101可能会有所帮助,这样您就可以看到regex实际上在做什么:
在本例中,由于[]
内部的+
,它与一个文本+
字符相匹配,因此您要搜索一个单词边界,后跟一个字母数字字符、+
或”
,后跟一个单词边界
您可能想要:
\b(\w+|\')\b
它查找单词边界,后跟至少一个字母数字字符或单个引号
查看regex101可能会有所帮助,这样您就可以看到regex实际上在做什么:问题基本上是“如何获得包括撇号在内的单词边界”。对吧? 如果是这样,那么您的正则表达式
/\b[\'\w]+\b/g
会显式地查找\b
的边界,该边界将匹配非单词字符(如空格或撇号),后跟字母或反之亦然。像这样:,(我加了几个字以便清楚地看到边界)
如果您想得到“pickle”和“can't”,那么就不要像这样查找/[\w+\']+/g
,请参见演示:
您建议的两个正则表达式的含义如下:
:多次查找边界字母,然后查找任何单词字母(请注意,这不起作用,因为它位于/\b[\w+\']\b/g
内)或撇号,然后查找边界[]
:通过撇号和任何单词多次查找边界字母(请注意,不需要在/\b\'[\w+]\'\b/g
中),然后再查找撇号和单词边界[]
/\b[\'\w]+\b/g
会显式地查找\b
的边界,该边界将匹配非单词字符(如空格或撇号),后跟字母或反之亦然。像这样:,(我加了几个字以便清楚地看到边界)
如果您想得到“pickle”和“can't”,那么就不要像这样查找/[\w+\']+/g
,请参见演示:
您建议的两个正则表达式的含义如下:
:多次查找边界字母,然后查找任何单词字母(请注意,这不起作用,因为它位于/\b[\w+\']\b/g
内)或撇号,然后查找边界[]
:通过撇号和任何单词多次查找边界字母(请注意,不需要在/\b\'[\w+]\'\b/g
中),然后再查找撇号和单词边界[]
“‘pickle’”
变成pickle”到底是什么意思?单引号在哪里消失?您只使用string.match(regex)
而不是基于regex的替换<代码>匹配返回包含匹配组的数组。难道你的不应该让短语=…
行在常量regex
行之前吗?谢谢你的回复!这是我的第一个问题。如果let phrase=“'pickle'”
则正则表达式匹配会去掉单引号以返回pickle
。我希望它返回“pickle”
。但是,当我let phrase=“don”
时,它会保留撇号。。。我只是使用.match
来更好地理解正则表达式的工作原理,这不是实际可用的代码。与顺序相同,它应该是let
语句,然后是const
语句,然后是console.log
您误解了\b
的含义。它与空间无关。它意味着从“文字字符”(字母数字加下划线)到非文字字符(任何其他字符)的转换。是的!我现在看到了。非常感谢。Dave提供的测试引擎也有帮助。我误解了\b
,把它们放在\'
旁边,把事情搞砸了,因为'
也是一个边界你说的““'pickle'”
变成pickle”到底是什么意思?单引号在哪里消失?您只使用string.match(regex)
而不是基于regex的替换<代码>匹配返回包含匹配组的数组。难道你的不应该让短语=…
行在常量regex
行之前吗?谢谢你的回复!这是我的第一个问题。如果let phrase=“'pickle'”
RegEx ma
\b(\w+|\')\b