how to use dotall flag for regex.exec()

后端 未结 4 855
我寻月下人不归
我寻月下人不归 2020-11-30 11:34

i want get to string in a multiline string that content any specific character and i want get to between two specific staring.

i used this regex and this work but if

相关标签:
4条回答
  • 2020-11-30 11:35

    You are looking for the s modifier, also known as the dotall modifier which forces the dot . to also match newlines. The dotall modifier does not exist in javascript. The workaround is replacing the dot . with...

    [\S\s]*
    

    Your regular expression would look like this.

    var regex = /-{2}Head([\S\s]*)-{2}\/Head/
    
    0 讨论(0)
  • 2020-11-30 11:44

    In 2018, with the ECMA2018 standard implemented in some browsers for the time being, JS regex now supports s DOTALL modifier:

    Browser support

    console.log("foo\r\nbar".match(/.+/s)) // => "foo\r\nbar"

    Actually, JS native match-all-characters regex construct is

    [^]
    

    It means match any character that is not nothing. Other regex flavors would produce a warning or an exception due to an incomplete character class (demo), though it will be totally valid for JavaScript (demo).

    The truth is, the [^] is not portable, and thus is not recommendable unless you want your code to run on JS only.

    regex = /--Head([^]*)--\/Head/
    

    To have the same pattern matching any characters in JS and, say, Java, you need to use a workaround illustrated in the other answers: use a character class with two opposite shorthand character classes when portability is key: [\w\W], [\d\D], [\s\S] (most commonly used).

    NOTE that [^] is shorter.

    0 讨论(0)
  • 2020-11-30 11:48

    javascript doesn't support s (dotall) modifier. The only workaround is to use a "catch all" class, like [\s\S] instead of a dot:

    regex = new RegExp("\-{2}Head([\\s\\S]*)-{2}\/\Head")
    

    Also note that your expression can be written more concisely using a literal:

    regex = /--Head([\s\S]*)--\/Head/
    
    0 讨论(0)
  • 2020-11-30 11:59

    Use catch all character class [\s\S] which means space or non space

    var regex = new RegExp("\-{2}Head([\s\S]*)-{2}\/\Head","m");      
    var content = "--Head \n any Code \n and String --/Head";
    var match = regex.exec(content);
    
    0 讨论(0)
提交回复
热议问题