正则表达式,可避免两个搜索词之间的标点符号或任何不需要的字符

时间:2014-07-13 01:01:00

标签: javascript regex

以下是我正在使用的文字。

“狗们去了房子。 狗,去了房子。 狗去了家里的妻子。“

我想使用正则表达式来获取从“dog”开始并以“house”结尾的字符串。我不想要第三行的第二行,因为它们都有标点符号。我确实想要带狗和房子。

我想出的正则表达式是:

/(D|d)og.[^\p{P}|s]{0,40}house.{0,1}(\s|\.)/

然而,它似乎不起作用。这是我得到的错误:

Error: Parse error on line 4:
... [

        "1,10,0,1,/(C|c)limb
---------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', ']', got 'undefined'
validated by jsonlint

我从事经济学,而不是计算机编程,所以请放轻松。 如果我遗漏任何内容或需要提供其他信息,请告诉我。 谢谢。

1 个答案:

答案 0 :(得分:1)

如果您只想允许单词字符和空格避免使用标点符号,则可以执行以下操作:

/dogs?[\w\s]+houses?[\s.]/i

<强>解释

dog         #  'dog'
 s?         #  's' (optional)
 [\w\s]+    #  any character of: 
            #    word characters (a-z, A-Z, 0-9, _), 
            #    whitespace (\n, \r, \t, \f, and " ") (1 or more times)
house       #  'house'
 s?         #  's' (optional)
 [\s.]      #  any character of: whitespace (\n, \r, \t, \f, and " "), '.'

Live Demo

如果您不想要包含结尾标点符号或空格,请在匹配的模式周围放置一个捕获组作为匹配结果:

/(dogs?[\w\s]+houses?)[\s.]/i

或者使用前瞻来断言其中一个位于字符串中的那个位置。

/dogs?[\w\s]+houses?(?=[\s.])/i

注意:添加i修饰符也用于不区分大小写的匹配。