我有以下字符串:|Africa||Africans||African Society||Go Africa Go||Mafricano||Go Mafricano Go||West Africa|
。
我正在尝试编写一个正则表达式,该表达式仅匹配包含单词Africa
或其任何派生词的词语(对|Mafricano|
和|Go Mafricano Go|
以外的所有词语均为“是”。每个术语都包含在两个|
之间。
现在我想出了:/\|[^\|]*africa[^\|]*\|/gi
,其中说:
\|
匹配|
[^\|]*
将零匹配到除|
africa
按字面意思匹配africa
[^\|]*
将零匹配到除|
\|
匹配|
我已尝试插入((?:\s)|(?!\w))
以使其/\|[^\|]*((?:\s)|(?!\w))africa[^\|]*\|/gi
。虽然成功排除了|Mafricano|
和|Go Mafricano Go|
,但它也排除了除|West Africa|
和|Go Africa Go|
之外的所有其他条目。这很好,但它需要包括所有单个单词Africa
及其衍生形式。
有人能帮助我吗?
答案 0 :(得分:4)
您可以使用此正则表达式
[^|]*\bAfrica[a-z]*\b[^|]*
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|\|).)*?\|
> "|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
\| '|'