2016-07-14 2 views
-2

У меня есть строка, как показано нижене может получить строку совпадения с регулярным выражением в nodejs

let value : '<ns2:NewsPaper unitid="112345"> 
     <idType>DG</idType> 
     </ns2:NewsPaper>' 

Мне нужно содержание <ns2:NewsPaper. я написать кусок кода. Но он возвращает null. Вот мой код:

let abc = /NewsPaper>(\*)</.exec(value); 
     console.log(abc); 

Он возвращает null. Зачем ?

+2

Почему вы пытаетесь совместить '>' после 'NewsPaper', если строка ввода не имеет' '' после нее? Строка не имеет '*', зачем использовать '\ *' в шаблоне? Используйте '/ NewsPaper \ b [^ <] * \ bunitid =" ([^ "] +)"/'и используйте' .exec (значение) [1] '. –

+0

Это ничтожное, но вам не нужно использовать 'var' и' let', как это. Предполагаю, вы используете их взаимозаменяемо. Я был бы более преднамеренным с использованием 'var',' let' и 'const'. Честно говоря, если вы используя версию 'node', которая поддерживает ES6, тогда вы должны просто использовать' let' и 'const' и избегать использования' var'. – wpcarro

+0

Также 'var value =" "; недействителен JS. Вам нужно будет избежать внутренних двойных кавычек, подобных этому '\" ', или обернуть присвоение в одинарных кавычках, как это:' var value = ' wpcarro

ответ

0

простой способ соответствовать будет:

let rex = /unitid=\"\d*\"/g; 
let abc = rex.exec(value); // ["unitid="112234"", "unitid="112234""] 
+0

Я хочу содержание newPaper – userh

0

Это регулярное выражение должно работать на то, что вы выскабливание:

unitid="[^"]+" 

Это будет соответствовать unitid=" буквально, посимвольно. Тогда он будет соответствовать [^"]

Что касается JS вроде этого:

const value = '<ns2:NewsPaper unitid="112234">'; 
const regex = /unitid="[^"]+?"/; 
const matches = value.match(regex); 

console.log(matches); 
// => ["unitid=\"112234\""] 

Обратите внимание, как захваченные круглые скобки не нужны. Это связано с реализацией JS функции match(..). Ваш выход, когда вы включаете захватив скобку будет:

["unitid=\"112234\"", "unitid=\"112234\""] 

Вы должны ожидать такое же поведение, даже если вы используете функцию exec(..). Поэтому в некоторых случаях, как это, может быть желательно исключить захват parens. Первый элемент массива matches будет тем, что потребляет ваше регулярное выражение; все, что следует за этим первым элементом, будет элементом, который ваш regex захватил.

Here's a link to the JSBin.

+0

Я хочу содержание NewsPaper. Как ? – userh

+0

Я думаю, что это должно было быть более ясным в первоначальном вопросе. – wpcarro

+0

Теперь я редактирую. Я не могу получить доступ к содержимому newsPaper. – userh

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