正则表达式匹配(Javascript)

时间:2014-10-18 08:30:44

标签: javascript regex

我有以下字符串:|Africa||Africans||African Society||Go Africa Go||Mafricano||Go Mafricano Go||West Africa|

我正在尝试编写一个正则表达式,该表达式仅匹配包含单词Africa或其任何派生词的词语(对|Mafricano||Go Mafricano Go|以外的所有词语均为“是”。每个术语都包含在两个|之间。

现在我想出了:/\|[^\|]*africa[^\|]*\|/gi,其中说:


  1. \| 匹配|

    1. [^\|]* 将零匹配到除|
    2. 之外的任何字符的无限实例
      1. africa 按字面意思匹配africa

        1. [^\|]* 将零匹配到除|
        2. 之外的任何字符的无限实例
          1. \| 匹配|

          2. 我已尝试插入((?:\s)|(?!\w))以使其/\|[^\|]*((?:\s)|(?!\w))africa[^\|]*\|/gi。虽然成功排除了|Mafricano||Go Mafricano Go|,但它也排除了除|West Africa||Go Africa Go|之外的所有其他条目。这很好,但它需要包括所有单个单词Africa及其衍生形式。

            有人能帮助我吗?

2 个答案:

答案 0 :(得分:4)

您可以使用此正则表达式

[^|]*\bAfrica[a-z]*\b[^|]*

DEMO

var str = "|Africa||Africans||African Society||Go Africa Go||Mafricano||Go Mafricano Go||West Africa|";
var arr = str.match(/[^|]*\bAfrica[a-z]*\b[^|]*/g);
console.log(arr); // ["Africa", "Africans", "African Society", "Go Africa Go", "West Africa"] 

答案 1 :(得分:1)

我想你想要这样的东西,

\|(?:(?!Mafrica|\|).)*?africa(?:(?!Mafrica|\|).)*?\|

DEMO

> "|Africa||Africans||African Society||Go Africa Go||Mafricano||Go Mafricano Go||West Africa|".match(/\|(?:(?!Mafrica|\|).)*?africa(?:(?!Mafrica|\|).)*?\|/gi);
[ '|Africa|',
  '|Africans|',
  '|African Society|',
  '|Go Africa Go|',
  '|West Africa|' ]

请勿忘记启用i修饰符以进行不区分大小写的匹配。

<强>解释

\|                       '|'
(?:                      group, but do not capture (0 or more
                         times):
  (?!                      look ahead to see if there is not:
    Mafrica                  'Mafrica'
   |                        OR
    \|                       '|'
  )                        end of look-ahead
  .                        any character except \n
)*?                      end of grouping
africa                   'africa'
(?:                      group, but do not capture (0 or more
                         times):
  (?!                      look ahead to see if there is not:
    Mafrica                  'Mafrica'
   |                        OR
    \|                       '|'
  )                        end of look-ahead
  .                        any character except \n
)*?                      end of grouping
\|                       '|'