Регулярное выражение JavaScript для соответствия слова любой пунктуации в конце - PullRequest
2 голосов
/ 30 октября 2019

Я пытаюсь перевести предложения в Pig-Latin с использованием регулярных выражений. Мне нужно выбрать слова с любым видом пунктуации в конце, чтобы я мог обрабатывать эти случаи по-разному.

Например, в «Я думаю, поэтому я». Мне нужно выражение, чтобы соответствовать «думать» и «есть».

Я пробовал различные подходы, такие как word.match(/\w+[!?.:;]$/) безрезультатно.

Ответы [ 2 ]

6 голосов
/ 30 октября 2019

Я предполагаю, что вы, возможно, пытаетесь написать выражение, возможно, немного похожее на:

\w+(?=[!?.:;,])

Демо

const regex = /\w+(?=[!?.:;,])/gm;
const str = `I think, therefore I am.
Je pense; donc je suis!
I don't think: therefore I am not?


`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

1 голос
/ 30 октября 2019

Попробуйте повторно найти шаблон \b\w+[!?.,:;]:

var re = /\b\w+[!?.,:;]/g;
var s = 'I think, therefore I am.';
var m;

do {
    m = re.exec(s);
    if (m) {
        console.log(m[0]);
    }
} while (m);
...