【问题标题】:How To Match the begining and the end of string如何匹配字符串的开头和结尾
【发布时间】:2015-08-11 21:47:42
【问题描述】:

如何匹配字符串的开头和结尾,但忽略其间的所有内容。我是这样做的,但结果总是为零。

document.write( (str.match(/^["“”'’]$/g) || []).length );

// expected results
str = "please \"don't\" talk"; // 2
str = "please don't talk"; // 0
str = "Thomas' car"; // 1

像我的代码 str.match(/["“”'’]/g) 一样计算所有的 qoutes 但是给^$ 总是给出零结果

【问题讨论】:

  • 这是什么意思?你想匹配一个单引号字符吗?
  • 请详细说明您想要捕捉的内容。即使在您的问题更新之后,它仍然不清楚。比如:为什么你把^$放在那里?
  • 对不起,我的母语不是英语,这很难解释,所以我包括了预期的结果
  • 还不清楚。 /^["“”'’]$/g 返回零结果,因为这意味着:一个字符长的字符串,由给定集合中的单引号字符组成。

标签: javascript regex


【解决方案1】:

试试

document.write( (str.match(/["“”'’]\s|\s["“”'’]/g) || []).length );

你会得到每个有相邻空格的引用的计数。它不适用于字符串末尾的引号。如果您也需要,请询问。

该 |在这种情况下分隔不同的搜索。因此,我们正在搜索引号后跟空格或空格后跟引号。如果您明确希望 \" 被计算在内,那么表达式会稍微复杂一些。我假设 \ 只是在字符串中转义 "。

【讨论】:

  • 这令人印象深刻:你怎么知道这个问题与空格有关?
  • 是的,就是这样,但我将 \s 更改为 \W 谢谢@Paul
  • 如果你想要非单词而不是非空格就足够了。另一个答案中提到的 \B 选项也将允许引号位于字符串的开头和结尾。
【解决方案2】:

你需要

\B["“”'’]|["“”'’]\B

demo

non-word boundary \B 确保匹配只发生在不是单词边界位置的位置:

\B 匹配两个单词字符之间的任何位置以及两个非单词字符之间的任何位置。

因此,\B["“”'’] 匹配所有前面没有单词 ([a-zA-Z0-9_]) 字符的子字符串,["“”'’]\B 匹配后面没有单词字符的撇号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-24
    • 2021-11-28
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2016-12-07
    • 2015-04-27
    相关资源
    最近更新 更多