Domanda

Qui c'era una domanda sul CamelCase regex . Con la combinazione di tchrist posta Mi chiedo quale sia il corretto utf-8 CamelCase .

A partire da espressioni regolari (brian d foy di):

/
    \b          # start at word boundary
    [A-Z]       # start with upper
    [a-zA-Z]*   # followed by any alpha

    (?:  # non-capturing grouping for alternation precedence
       [a-z][a-zA-Z]*[A-Z]   # next bit is lower, any zero or more, ending with upper
          |                     # or 
       [A-Z][a-zA-Z]*[a-z]   # next bit is upper, any zero or more, ending with lower
    )

    [a-zA-Z]*   # anything that's left
    \b          # end at word 
/x

e modificando a:

/
    \b          # start at word boundary
    \p{Uppercase_Letter}     # start with upper
    \p{Alphabetic}*          # followed by any alpha

    (?:  # non-capturing grouping for alternation precedence
       \p{Lowercase_Letter}[a-zA-Z]*\p{Uppercase_Letter}   ### next bit is lower, any zero or more, ending with upper
          |                  # or 
       \p{Uppercase_Letter}[a-zA-Z]*\p{Lowercase_Letter}   ### next bit is upper, any zero or more, ending with lower
    )

    \p{Alphabetic}*          # anything that's left
    \b          # end at word 
/x

Hai un problema con le linee marcate '###'.

Inoltre, come modificare il regolare quando assumendo che i numeri e la sottolineatura sono equivalenti alle lettere minuscole, quindi W2X3 è una parola CamelCase valido.

Aggiornamento: (ysth commento)

per il prossimo,

  • any: media "maiuscola o minuscola o numero o di sottolineatura"

La regex dovrebbe corrispondere CamelWord, CAW

  • iniziare con la lettera maiuscola
  • opzionale qualsiasi
  • lettera minuscola o un numero o di sottolineatura
  • opzionale qualsiasi
  • lettera maiuscola
  • opzionale qualsiasi

Per favore, non contrassegnare come duplicato, perché non è. Il domanda originale (e le risposte troppo) pensavano solo ascii.

È stato utile?

Soluzione

Io davvero non può dire quello che stai cercando di fare, ma questo dovrebbe essere più vicino a ciò che il vostro intento originale sembra essere stato. Io ancora non posso dire quello che vuoi dire a che fare con esso, però.

m{
    \b
    \p{Upper}      #  start with uppercase code point (NOT LETTER)

    \w*            #  optional ident chars 

    # note that upper and lower are not related to letters
    (?:  \p{Lower} \w* \p{Upper}
      |  \p{Upper} \w* \p{Lower}
    )

    \w*

    \b
}x

uso Mai [a-z]. E infatti, non utilizzare \p{Lowercase_Letter} o \p{Ll}, dal momento che quelle non sono la stessa della \p{Lowercase} più desiderabile e più corretta e \p{Lower}.

E ricorda che \w è in realtà solo un alias per

[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Letter_Number}\p{Connector_Punctuation}]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top