2016-09-07 2 views
0

Я имею следующую строку,Не соответствует шаблону из строки

var str = "/\S\w\djoseph/"; 

Я просто хотел, чтобы принести символы, которые не являются в следующей схеме,

/\\(\w|\d)/ 

Я имею в виду просто хочу извлечь joseph из вышеуказанной строки. Я пробовал со следующим, но мое регулярное выражение работает не так, как ожидалось.

var str = "/\S\w\djoseph/"; 
var mat = /[^\\(\w|\d)]/g.exec(str); 

console.log(mat); //["/"] 

Может ли кто-нибудь помочь мне получить нужную строку из целевой строки?

+0

Try 'console.log (/ \ S \ ш \ djoseph/.source.replace (/^((?:\\.)+)(.*)/, функция (м, g1 , g2) {return g1 + g2.toUpperCase();})) ' –

+0

* Я имею в виду, что я просто хочу извлечь' joseph' из приведенной выше строки * - каково это правило здесь? Может ли вход быть '/^\ Sjoseph (?: \ R? \ N |) conrad: \ s * (?! 1990 $) \ d + $ /'? –

+0

@ WiktorStribiżew Это не будет работать для этой строки: 'console.log (/ \ S \ w \ djoseph \ w \ w/.source.replace (/^((?:\\.)+)(.*)/ , function (m, g1, g2) {return g1 + g2.toUpperCase();})) ' – Mediocre

ответ

1

Вы можете использовать это регулярное выражение в .replace с обратным вызовом:

/\S\whello\s\d/.source.replace(/(\\[wsd])|(.)/g, function($0, $1, $2){ 
    return ($1 == undefined ? "" : $1) + ($2 != undefined ? $2.toUpperCase() : ""); 
}) 

//=> "\S\wHELLO\s\d" 

Это прописные все, что не \w или \s или \d.

+0

Это звучит полезно. Но почему вы изменили исходную строку? Он имеет 'var str ="/\ S \ w \ djoseph/";' В принципе, я получаю исходную строку из объекта регулярного выражения, например '/ test \ d/.source' – Mediocre

+0

Да .. Но это также дает мне тот же результат, '/\S\w\djoseph/g.source.replace(/\\ ./g," ");'. Хорошо, позвольте мне прийти к сути, я просто хочу, чтобы моя исходная строка была ''/\\ S \\ w \\ dJOSEPH/''. Вот почему я попросил регулярное выражение не выбирать '' \ S \ w \ d "'. Чтобы я мог манипулировать остальными персонажами в соответствии с моим требованием. Здесь я просто превратился в верхний регистр для иллюстрации. – Mediocre

+1

Превосходно! +1 Он ограничен '[wsd]'. что, если мы хотим совместить все символы/числа/все, за которыми следует «\»? Мне удалось изменить его на '/ (\\ [.]) | (.)/'Но этот сломал логику. – Mediocre

0

Как насчет того чтобы заменить все, что соответствует \. с пустой строкой?

var a = '\\a\\btest\\c\\d'; var result = a.replace(/\\./g, ''); console.log(result);

Смежные вопросы