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))
然后

我想我知道所有正则表达式都做什么:

  • /text/g
    表示斜线之间的所有内容,而g表示全局 在第一次命中后继续搜索
  • \b
    是单词边界,每边都有空格
  • w+
    表示字母数字,而“+”表示它可以用于更多 超过1个字符
  • [\w\']+
    表示A-Za-z0-9和任何长度的撇号
但我想得到这个:
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