it-swarm-ru.tech

Строка Regex заканчивается тем, что не работает в Javascript

Я не очень знаком с регулярным выражением. Я пытался проверить, заканчивается ли строка другой строкой. Код ниже возвращает ноль, когда я ожидал истину. Что не так с кодом?

var id = "John";
var exists  ="blahJohn".match(/id$/);
alert(exists);
15
Tony_Henrich

Что ж, при таком подходе вам потребуется использовать конструктор RegExp , чтобы построить регулярное выражение, используя переменную id:

var id = "John";
var exists = new RegExp(id+"$").test("blahJohn");
alert(exists);

Но есть множество способов добиться этого, например, вы можете взять последние id.length символов строки и сравнить их с id:

var id = "John";
var exist = "blahJohn".slice(-id.length) == id; // true
19
CMS

Для этого вам нужно использовать объект RegExp(), а не литерал:

var id = "John",
    reg = new RegExp(id+"$");

alert( reg.test("blahJon") );

То есть, если вы не знаете, какое значение вы тестируете, опережая время выполнения. В противном случае вы можете сделать:

alert( /John$/.test("blahJohn") );
4
James Sumners

Лучший способ сделать это - использовать RegExp.test:

(new RegExp(id + '$')).test('blahJohn'); // true
(new RegExp(id + '$')).test('blahJohnblah'); // false

Еще лучше было бы создать простую функцию, подобную этой:

function strEndsWith (haystack, needle) {
    return needle === haystack.substr(0 - needle.length);
}

strEndsWith('blahJohn', id); // true
strEndsWith('blahJohnblah', id); // false
1
lonesomeday
var id = new RegExp("John");
var exists  ="blahJohn".match(id);
alert(exists);

попробуй это

0
Stewie Griffin
var id = "John";

(new RegExp(`${id}$`)).test('blahJohn');  // true
(new RegExp(`${id}$`)).test('blahJohna'); // false

`$ {id} $` - это JavaScript строки шаблона , которые будут скомпилированы в 'John $'.

$ после Джона в RegExp означает конец строки, поэтому в тестируемой строке не должно быть ничего после значения идентификатора (т. Е. Джона), чтобы пройти тест.

new RegExp (`$ {id} $`) - скомпилирует его в /John$/ (поэтому, если id не должен быть динамическим, вы можете использовать просто/John $/вместо нового RegExp (`$ {id} $`))

0
Alexander

Зачем использовать RegExp? Это дорого.

function EndsWith( givenStr, subst )
{
var ln = givenStr.length;
var idx = ln-subst.length;
return ( giventStr.subst(idx)==subst );
}

Намного проще и экономичнее, не так ли?

0
Alexander Sobolev

Если вам это нужно для функции замены, рассмотрите это regExp:

var eventStr = "Hello% World%";

eventStr = eventStr.replace(/[\%]$/, "").replace(/^[\%]/, ""); // replace eds with, and also start with %.

// output: eventStr = "Hello% World";

0
Dudi

Мне нравится решение @lonesomeday, но я фанат расширения прототипа String.pro в этих сценариях. Вот моя адаптация его решения 

String.prototype.endsWith = function (needle) {
     return needle === this.substr(0 - needle.length);
}

Так что можно проверить с 

if(myStr.endsWith("test")) // Do awesome things here. 

Вкусные... 

0
stephen mc

Попробуй это -

var reg = "/" + id + "$/";
var exists  ="blahJohn".match(reg);
0
Sachin Shanbhag