1

我正在尝试编写正则表达式字数,但我发现的大多数示例仅涵盖以下部分情况:

  1. 你好,有=应该是2个词(注意逗号后面没有空格)
  2. 你好,=应该是2个字(注意逗号前后的空格)
  3. 10,000 美元 = 应该是 1 个字
  4. 你好 ?= 应该是 2 个单词(注意问号前的空格)
  5. hello-there = 应该是 2 个字
  6. http://www.google.com = 应该是 1 个字
  7. http://www.google.com/analytics = 应该是 1 个字

我目前在 jquery 中使用以下代码

var total_words = $.trim($("#mytextbox").value).split(/[\s\-\.\\\/\?\!]+/).length

但它只涵盖情况#3 和#5。

覆盖 URL 对我来说不是优先事项。

任何帮助,将不胜感激!

4

2 回答 2

0

以下 RegEx 将适用于您的所有示例:

var total_words = /(\b(https?|ftp):\/\/([\-A-Z0-9.]+)(\/[\-A-Z0-9+&@#\/%=~_|!:,.;]*)?(\?[A-Z0-9+&@‌​#\/%=~_|!:,.;]*)?)|[+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?|(&)|('\w+)|(\w+'‌​\w+)|(\w+')|(\w+)/gi

此 RegEx 已从 JSoft 转换为 JavaScript:

(\b((?#protocol)https?|ftp)://((?#domain)[-A-Z0-9.]+)((?#file)/[-A-Z0-9+&@#/%=~_|!:,.;]*)?((?#parameters)\?[A-Z0-9+&@#/%=~_|!:,.;]*)?)|[+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?|\w+

第一部分定义了任何 url 类型的项目:

(\b((?#protocol)https?|ftp)://((?#domain)[-A-Z0-9.]+)((?#file)/[-A-Z0-9+&@#/%=~_|!:,.;]*)?((?#parameters)\?[A-Z0-9+&@#/%=~_|!:,.;]*)?)

部分部分适用于带或不带小数的货币:

[+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?

最后,第三部分匹配单词:

\w+
于 2013-02-01T19:12:15.387 回答
0

由于 javascripts 正则表达式引擎从左到右评估,您可以指定更具体的正则表达式,然后在最后指定更通用的正则表达式

\b(https?://\S+|\d+(,\d+)+|\w+)\b 
   ------------  --------- ---
         |           |      |->general
         |           |->less specific
         |->more specific regex
于 2013-02-01T19:12:28.883 回答