2016-06-30 19 views
1

Software - Adobe Professionelle XIRegex unterschiedliche Anzahl von Wörtern

Programmierung - JavaScript mit regulären Ausdruck Wild Card Worte passen

Background - Ich habe mehrere PDF-Zeichnungen mit einem Titelblock, Java-Skript , digitale Signaturfelder werden basierend auf dem Ort des Wortes hinzugefügt (durch Abgleich mit Regex).

Derzeit wird geprüft, ob für Revision 1 eines Zeichnungsblocks Wörter vorhanden sind.

Das Skript sucht nach der Revisionsnummer 1, gefolgt von einem Datum, einem Titel (mit einer variierenden Anzahl von Wörtern) und 4 Initialsätzen.

Die Zahl 1 ist statisch (Datum, Titel und Initialen sind alle Platzhalter, da sie für jede Zeichnung unterschiedlich sind).

Ich verwende reguläre Ausdrücke, um die Wörter zu entsprechen.

Dieser Teil des regulären Ausdrucks findet die Nummer 1 und das Datum (das funktioniert).

^1\s[0-9]{1,2}.[0-9]{1,2}.[0-9]{2} 

Der Rest des regulären Ausdrucks wird den Titel und die Initialen nicht passend (dies funktioniert nicht)

s\w+(\s+\w+){1,8} 

Wenn jemand mit dem regulären Ausdruck helfen können die Wörter und Buchstaben zu entsprechen, die sein wird, am meisten geschätzt.

Sobald der Regex-Abgleich funktioniert, wird an jeder Stelle der 4 Sätze von Initialen aufgeteilt, so dass das Javascript digitale Signaturfelder an diesen Stellen hinzufügen kann.

Kann auch Hilfe gegeben werden, wie man Wörter mit Regex teilt?

numWords = this.getPageNumWords(0); 
// number of words on page 
// loop through the words on page 
for (var j = 0; j < numWords-1; j++) 
{ // get word pair to test 
    ckWords = this.getPageNthWord(0, j) + ' ' + this.getPageNthWord(0, j + 1); // test words 

    // example of word string 
    // 1 26.05.16 THE REINFORCEMENT REVISED MM SB AE GM 

    if (ckWords.match(/^1\s[0-9]{1,2}.[0-9]{1,2}.[0-9]{2}\s\w+(\s+\w+){1,8}/)) 
    { 
     console.println(ckWords); 
    } 
} 

pdf of title block with text

+0

Haben Sie mit Split betrachtet() anstelle eines reg ex?Dann können Sie bei Bedarf für jedes Wort eine Regex oder einen anderen Test durchführen. – starshine531

+0

Können Sie die Rückseite der Zeichenfolge so anpassen? '(\ s + \ w \ w) {1,4} $' Du willst nur die Initialen, oder? – starshine531

Antwort

0

Fügen Sie die Initialen an das Ende des regulären Ausdrucks

Hier ist das gesamte Skript (nur das Javascript arbeitet, für regex benötigt helfen), so dass Sie sie mithalten können separat.

ckWords = '1 26.05.16 THE REINFORCEMENT REVISED MM SB AE GM'; 
 

 
match = ckWords.match(/^1\s\d{1,2}\.\d{1,2}\.\d{2}\s\w+(?:\s+\w+){1,8}\s([A-Z]{2})\s([A-Z]{2})\s([A-Z]{2})\s([A-Z]{2})$/); 
 
console.log(match);

Dadurch werden die Initialen in Capture-Gruppen 1 bis 4 des Spiel setzen.

Vergessen Sie auch nicht, dass . in regulären Ausdrücken eine besondere Bedeutung hat, daher müssen Sie sie ausmerzen, um sie explizit zu finden.

+0

Die Regex hat nicht als Ganzes funktioniert, ich habe das Teil mit den Initialen am Ende getestet. Regex muss – JoJo

+0

finden Ich habe eine Demo hinzugefügt, die zeigt, dass es funktioniert. – Barmar

+0

Ich habe das Code-Snippet ausgeführt, es kam zu einem Fehler. – JoJo

0

Ist das genau das, wonach Sie suchen?

// some string with variable spaces and variable number of title words 
 
var words = '1 26.05.16 THE REINFORCEMENT REVISED MM SB AE GM'; 
 

 
// match for: 
 
// possible spaces at the start 
 
// a 1 
 
// variable spaces 
 
// a xx.xx.xx date 
 
// variable spaces 
 
// any number of words that are not the initials, separated by variable spaces 
 
// variable spaces 
 
// four initials, separated by variable spaces 
 
// possible spaces at the end 
 
var matches = words.match(/^\s*1\s+\d\d\.\d\d\.\d\d\s+((?:\w+\s+)+\w+)\s+([A-Z]{2})\s+([A-Z]{2})\s+([A-Z]{2})\s+([A-Z]{2})\s*$/); 
 
console.log(matches); 
 

 
// replace variable spaces in title with single spaces 
 
console.log(matches[1]); 
 
matches[1] = matches[1].replace(/\s+/g, ' '); 
 
console.log(matches[1]);

Verwandte Themen