Как поместить переменную в regex [duplicate]

Для динамического поворота используйте GROUP_CONCAT с CONCAT. Функция GROUP_CONCAT объединяет строки из одной группы в одну строку с различными опциями.

SET @sql = NULL;
SELECT
    GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(CASE WHEN action = "',
      action,'"  AND ', 
           (CASE WHEN pagecount IS NOT NULL 
           THEN CONCAT("pagecount = ",pagecount) 
           ELSE pagecount IS NULL END),
      ' THEN 1 ELSE 0 end) AS ',
      action, IFNULL(pagecount,'')

    )
  )
INTO @sql
FROM
  t;

SET @sql = CONCAT('SELECT company_name, ', @sql, ' 
                  FROM t 
                   GROUP BY company_name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

DEMO HERE

64
задан informatik01 6 April 2015 в 14:21
поделиться

2 ответа

var re = new RegExp("/\b"+test+"\b/"); 

\b в строковом литерале является символом обратного пробела. При размещении регулярного выражения в строковом литерале вам понадобится еще один раунд экранирования:

var re = new RegExp("\\b"+test+"\\b"); 

(В этом контексте вам также не нужен //.)

109
ответ дан bobince 21 August 2018 в 23:35
поделиться
  • 1
    «Новый» оператор не требуется, согласно bclary.com/2004/11/07/#a-15.10.3 – James 26 April 2010 в 12:09
  • 2
    Существует много мест, где конструктор-функция встроенного типа может использоваться как с new, так и без него. Однако для согласованности с другими объектами, где это может быть недействительным и ясностью в целом, я всегда использовал бы new. – bobince 26 April 2010 в 12:11
  • 3
    Другой способ - использовать одинарные кавычки для ясности, поэтому вам не нужно избегать обратных слешков: new RegExp('\b'+test+'\b'); – IQAndreas 14 March 2015 в 08:09
  • 4
    Вам все равно нужно избегать обратной косой черты. Одиночные кавычки не имеют разных правил экранирования для двойных кавычек в JavaScript (в отличие, скажем, от PHP). – bobince 15 March 2015 в 10:40
  • 5
    Этот ответ также решает один и тот же вопрос при попытке использовать пограничные операторы для переменной с функциями регулярного выражения .match () и .replace () JS regexing. – HoldOffHunger 25 October 2016 в 20:50

вы можете использовать

/(^|,)52(,|$)/.test('51,52,53')

, но я предлагаю использовать

var list = '51,52,53';
function test2(list, test){
    return !((","+list+",").indexOf(","+test+",") === -1)
}
alert( test2(list,52) )
7
ответ дан Lauri 21 August 2018 в 23:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: